私のアプリケーションでは、ユーザーのログアウト時間を節約しています。これは、ユーザーがログイン ボタンをクリックすると正常に動作しますが、私の要件は、ユーザーがブラウザーを閉じてもログアウト時間を保存することです。これが不可能な場合は、ユーザーがウィンドウを閉じるとすぐにセッションを破棄する方法を教えてください。
どんな助けでも大歓迎です。
以前は、イベント ハンドラーで同期Ajaxを実行する必要がありました。それが最新のブラウザーでも当てはまるかどうかはわかりません。非同期に移行する場合は、現実的なクライアント負荷でテストして、ユーザー間でのみ現れる競合状態に陥らないようにしてください。
クライアントからの何らかのハートビート Ajax 呼び出しを、たとえば 5 分ごとに行うことをお勧めします。このような呼び出しを 2 回続けて見逃すと、サーバー側のセッションが強制終了されます。これにより、ユーザーがログアウトしないすべての状況 (ブラウザーのクラッシュ、OS のクラッシュ、ネットワーク障害など) が処理されます。
アンロード イベントの処理に関する潜在的な問題:
これは質問の最後の部分に答えます。ブラウザを閉じてセッションを自動的に閉じます。ウィキペディアによると: Cookie の作成時に有効期限または有効期間が設定されていない場合、セッション Cookie が作成されます。通常、Web ブラウザーは、ユーザーがブラウザーを閉じると、セッション Cookie を削除します。
当面のタスクは、 を使用して有効期限のない Cookie を作成することExt-state-CookieProvider
です。構成をまったく省略すると、 ExtJSexpires
はデフォルトで 7 日間に設定します。これについてはソースを確認してください。expires
したがって、次のように明示的に null を指定して Cookie を作成する必要があります。
var cp = Ext.create('Ext.state.CookieProvider', {
expires: null
});
ブラウザを閉じると、すべての Cookie 値が削除されます。
この回答に従って、beforeunload
イベントを処理してから AJAX ログアウトを実行できるはずです。
テストされていませんが、次のように動作するはずです。
Ext.EventManager.on(window, 'beforeunload', function() {
Ext.Ajax.request({
url: 'logout.json',
timeout: 60000
});
});