2

私のページでこのコードを使用すると問題が発生します:

期限切れセッションのあるコード

<?php 
session_start();
if(!isset($_SESSION['clientmacs']) ) { 
    header('Location: index.php');
} else {
    if(time() - $_SESSION['timeLogin'] > 1800) {
        header('Location: include/logout.php');
    }
    $userclient = $_SESSION['clientmacs'];
?>
<html>
    HTML CODE
</html>
<?php
}
?>

しかし、このコードを使用すると、問題はなくなり、ページは正常に機能します。

期限切れセッションのないコード

<?php 
session_start();
if(!isset($_SESSION['clientmacs'])) { 
    header('Location: index.php');
} else {
    $userclient = $_SESSION['client'];;
?>
<html>
    HTML CODE
</html>
<?php
}
?>

Google Chromeのエラー:

This webpage has a redirect loop

Http://localhost/mac/index.php The website has too many redirects. The incidence may be
resolved by deleting the cookies from this site or allowing third party cookies. If
that fails, the incidence may be related to a bug in the server configuration, not the
computer.
4

4 に答える 4

4

リダイレクションを実行するときは、タイムアウトの$ _SESSION値($ _SESSION ['timeLogin'])をリセットする必要があります。そうしないと、クライアントがリダイレクトから戻ったときに、セッションの値が同じになり、再びリダイレクトされます。

あなたはそれを次のように解決することができます:

if(!isset($_SESSION['clientmacs']) ) {
    $_SESSION['clientmacs'] = ""; // add this line if not added somewhere else
    header('Location: index.php');
}

if(time() - $_SESSION['timeLogin'] > 1800) {
    $_SESSION['timeLogin'] = time(); // add this line
    header('Location: include/logout.php');
}

たぶん(ロジックによっては)セッション全体をクリアし、session_destroy()リダイレクトを実行するときに通常のフロー()を使用して再構成する方がよいでしょう。

于 2012-07-11T21:22:31.717 に答える
2

ここに追加する必要があるものがあります

if(!isset($_SESSION['clientmacs'])) { 
    $_SESSION['clientmacs'] = 'something' // or it will redirect forever;
    header('Location: index.php');
}
于 2012-07-11T21:21:23.550 に答える
1

ログアウトはインデックスにリダイレクトされ、そこで状態が再度チェックされます

if(time() - $_SESSION['timeLogin'] > 1800)

これは真実であり、ログアウトなどに送り返されます。$ _SESSION ['timeLogin']を変更する必要があります。そうしないと、このサイクルが中断されることはありません。

于 2012-07-11T21:22:01.570 に答える
0

IFステートメントの外側で時間差を計算してみてください。

例えば

$difference = time() - $_SESSION['timeLogin'];

if($difference > 1800){
    //Do Something
}
于 2012-07-11T21:22:59.110 に答える