私のアプリケーションでは、ユーザーのログアウト時間を保存しています。これは、ユーザーがログインボタンをクリックしたときに問題なく動作しますが、ユーザーがブラウザを閉じてもログアウト時間を保存することが条件です。これが不可能な場合は、ユーザーがウィンドウを閉じるとすぐにセッションを破棄する方法を教えてください。ブラウザが終了したらセッションを終了する方法
ご協力いただければ幸いです。
私のアプリケーションでは、ユーザーのログアウト時間を保存しています。これは、ユーザーがログインボタンをクリックしたときに問題なく動作しますが、ユーザーがブラウザを閉じてもログアウト時間を保存することが条件です。これが不可能な場合は、ユーザーがウィンドウを閉じるとすぐにセッションを破棄する方法を教えてください。ブラウザが終了したらセッションを終了する方法
ご協力いただければ幸いです。
this answerによると、beforeunload
イベントを処理してから、AJAXログアウトを実行する必要があります。
テストされていないが、それは次のように動作するはずです:
Ext.EventManager.on(window, 'beforeunload', function() {
Ext.Ajax.request({
url: 'logout.json',
timeout: 60000
});
});
それはあなたにするために使用は、イベントハンドラで同期のAjaxをしなければなりませんでした。それが現代のブラウザでまだ真実であるかどうかはわかりません。非同期の場合は、現実的なクライアント負荷でテストして、ユーザー間にしか見えない競合状態に陥らないようにしてください。
5分ごとにクライアントからハートビートAjaxコールを呼び出すことをお勧めします。このような2つのコールが連続して欠けていると、セッションのサーバー側が終了します。これは、ユーザーがログアウトしないすべての状況(ブラウザのクラッシュ、OSのクラッシュ、ネットワークの障害など)を処理します。アンロードイベントに作用すると
潜在的な問題:
お返事ありがとう – Gouse
これは質問の最後の部分に答えます。ブラウザを終了してセッションを自動的に閉じます。 Wikipediaによると:Cookie作成時に有効期限または有効期間が設定されていない場合、セッションCookieが作成されます。 Webブラウザは通常、ユーザーがブラウザを閉じるとセッションCookieを削除します。
有効期限のないクッキーを作成するには、Ext-state-CookieProvider
を使用します。 expires
の設定をそのままにしておくと、ExtJSはそれをデフォルトの7日間にします。これについてはthe sourceをチェックしてください。したがって、あなたはそうのように、ヌルの明示的なexpires
でクッキーを作成する必要があります。ブラウザを閉じるとき
var cp = Ext.create('Ext.state.CookieProvider', {
expires: null
});
すべてのクッキー値が削除されます。
お返事ありがとうございます – Gouse