3

問題は、セッションが期限切れになったときに、ログイン ページに戻るためにページを 2 回リロードする必要があることです。ここに私の.htaccessファイルがあります

php_flag display_errors on
php_value error_reporting 9999

RewriteEngine On
Options -MultiViews
AddDefaultCharset UTF-8
php_value session.gc_maxlifetime 5
php_value session.gc_divisor 1
php_value session.gc_probability 1
php_value session.cookie_lifetime 5
php_value session.save_path /path/to/session/folder

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

私はいくつかのカスタム MVC フレームワークを使用しており、コントローラー __construct 関数で handleLogin() 関数を呼び出しています

function __construct() {
    parent::__construct();
    Auth::handleLogin();
}

そして最後にここに handleLogin() 関数があります

public static function handleLogin() {
    @session_start();
    if (isset($_SESSION['loggedIn'])) {
        $logged = $_SESSION['loggedIn'];
    } else {
        session_destroy();
        header('location: ' . URL . 'login');
        exit;
    }
}

セッションの有効期限が切れたときに最初の更新後にユーザーをログイン ページにリダイレクトするには、何を変更する必要がありますか?

前もって感謝します!

PS Debianで実行しています

更新:ここにログアウト機能があり、ユーザーがクリックするとすぐにログインページにリダイレクトされます。

function logout()
{
    session_destroy;
    header('location: ' . URL .  'login');
    exit;
} 

更新#2問題の説明を改善するためにスクリーンショットをいくつか取得しました

1) セッションがアクティブで、すべてが正常に機能している場合 ここに画像の説明を入力

2) セッションの有効期限が切れました - ユーザーがリンクをクリックするか、(最初の更新後に) ページを更新します。 ここに画像の説明を入力

3) 2 回目の更新後 ここに画像の説明を入力

もう1つ..デフォルトのphp.ini設定(セッションの有効期間:1440秒)を使用すると、リダイレクトに問題なくすべてが正常に機能します

4

2 に答える 2

0

セッション破棄を記述してからリダイレクトする必要があるログアウト関数を作成する必要があると思います。そのため、ユーザーがログアウト リンクをクリックすると、セッション変数を破棄して、再度ログイン ページにリダイレクトできます。

セッションを破棄するために ajax コールバックを使用している場合は、javascript でページを更新して、ユーザーをログイン ページにリダイレクトする必要があります。

于 2013-10-21T12:00:44.363 に答える
0

エラーの原因はわかりましたが、なぜこのようなばかげたバグが発生したのか正確にはわかりません。以前session_set_cookie_params(0);のコードで、ブラウザが常に開いている間にコードを変更し、削除session_set_cookie_params(0);して追加しましphp_value session.gc_maxlifetime 5た。それが紛争を引き起こしたのです。一方はブラウザが閉じるまでセッションが続くと予想し、もう一方は 5 秒後にセッションを終了しました。キャッシュを 100 回クリアしましたが、ブラウザを閉じてプロジェクトを再度開くまで何も起こりませんでした。

于 2013-10-22T06:54:30.293 に答える