7

ユーザーのログイン/ログアウトアプリケーションがあります。セッションを破棄したいのですが、ブラウザを閉じると正常に動作します ((すべてのタブ))、IE、Firefox が動作します。しかし、ユーザーが単一のタブを閉じたときにセッションを破棄したい。私は使っている :

session_set_cookie_params(0);
session_start();
4

3 に答える 3

21

ブラウザは、ブラウザ プロセス全体が終了したときにのみセッション Cookie を破棄します。ユーザーがタブを閉じたかどうか、いつ閉じたかを判断する信頼できる方法はありません。アタッチできるハンドラーがありonbeforeunload、うまくいけば、サーバーに ajax 呼び出しを行ってタブを閉じることができますが、信頼性は高くありません。

また、ユーザーがサイトで 2 つ以上のテーブルを開いている場合はどうなるでしょうか? ユーザーが 1 つのタブを閉じると、ユーザーがサイトを使い続けるつもりだったとしても、もう 1 つのタブは実質的にログアウトされます。

于 2012-06-09T06:01:01.067 に答える
3

解決策は、独自のメソッドでセッション タイムアウトを実装することです。最後のリクエストの時刻を示す単純なタイム スタンプを使用し、リクエストごとに更新します。

これに似たものをコーディングする必要があります

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
    // request 30 minates ago
    session_destroy();
    session_unset();
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time

これについての詳細は、質問Destroy or unset session when user close the browser without clickout on logout に似ています。

必要なすべてをカバーしています。

于 2012-06-09T06:05:52.390 に答える
-3

このリンクは非常に役立ちます

ただし、JavaScript 関数である関数 endession にコードを追加する必要があります。ajax を使用して logout.php を呼び出すことができます。それは私のために働いた:

$.ajax({
    url:"logout.php",
    method:'POST',
    contentType:false,
    processData:false,
    success:function(data)
    {
        alert("session destroyed");
    }
});
于 2018-09-18T11:41:39.607 に答える