1

昨日ここに質問を投稿したところ、迅速な回答が得られました。素晴らしいコミュニティです!

以下のスクリプトと、その実行が一貫していない理由について、誰かが私 (PHP の初心者) を啓発するのを手伝ってくれることを願っています。

次の session.php ファイルを使用して、ログインとセッションのタイムアウトを確認しています。

`

function logged_in() {
    return isset($_SESSION['user_id']);
    session_write_close();
}

function session_expired() {
    $now = time();
    $limit = $now - 7200; // 2 hour
    return isset($_SESSION['last_activity']) && ($_SESSION['last_activity'] < $limit);
    session_write_close();
}

function confirm_logged_in() {
    $now = time();
    if (session_expired()) {
        $_SESSION = array();
        if(isset($_COOKIE[session_name()])) {
        setcookie(session_name(), '', time()-42000, '/');
        }
        session_destroy();
        redirect_to("http://domain.com/login.php?logout=2");
        exit;
    }
    elseif (!logged_in()) {
        redirect_to("http://domain.com/login.php");
        exit;
    }
    else {
        $_SESSION['last_activity'] = $now;
        session_write_close();
    }
}

?>`

各ページの上部には、次のものがあります。

<?php require_once("../includes/session.php"); ?> <?php require_once("../includes/functions.php"); ?> defines some other functions I use <?php confirm_logged_in(); ?>

何が起こっているかというと、session_expired() が常にトリガーされるとは限らず、redirect_to(" http://domain.com/login.php?logout=2 ");の代わりに発生します。redirect_to(" http://domain.com/login.php ");に移動します。

誰が何が間違っているかを見ることができますか?

4

2 に答える 2

0

そこで、コードのセクションから session_write_close() を削除することを勧めてくれた親切な人々のアドバイスを受けました。素晴らしいアドバイス!

しかし、それは私の問題を解決しませんでした。サイト内を移動しているときにページがまだ読み込まれておらず、これは散発的にしか発生していませんでした.

$_SESSION['last_activity'] = time(); を設定する必要があることがわかりました。私のログインページで。これで問題は解決しました。これで、ページが一貫してすばやく読み込まれます。助けてくれてありがとう!

于 2013-06-20T08:40:22.110 に答える