ユーザーのログイン/ログアウトアプリケーションがあります。セッションを破棄したいのですが、ブラウザを閉じると正常に動作します ((すべてのタブ))、IE、Firefox が動作します。しかし、ユーザーが単一のタブを閉じたときにセッションを破棄したい。私は使っている :
session_set_cookie_params(0);
session_start();
ブラウザは、ブラウザ プロセス全体が終了したときにのみセッション Cookie を破棄します。ユーザーがタブを閉じたかどうか、いつ閉じたかを判断する信頼できる方法はありません。アタッチできるハンドラーがありonbeforeunload
、うまくいけば、サーバーに ajax 呼び出しを行ってタブを閉じることができますが、信頼性は高くありません。
また、ユーザーがサイトで 2 つ以上のテーブルを開いている場合はどうなるでしょうか? ユーザーが 1 つのタブを閉じると、ユーザーがサイトを使い続けるつもりだったとしても、もう 1 つのタブは実質的にログアウトされます。
解決策は、独自のメソッドでセッション タイムアウトを実装することです。最後のリクエストの時刻を示す単純なタイム スタンプを使用し、リクエストごとに更新します。
これに似たものをコーディングする必要があります
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 に似ています。
必要なすべてをカバーしています。
ただし、JavaScript 関数である関数 endession にコードを追加する必要があります。ajax を使用して logout.php を呼び出すことができます。それは私のために働いた:
$.ajax({
url:"logout.php",
method:'POST',
contentType:false,
processData:false,
success:function(data)
{
alert("session destroyed");
}
});