0

私のアプリケーションでは、ユーザーのログアウト時間を節約しています。これは、ユーザーがログイン ボタンをクリックすると正常に動作しますが、私の要件は、ユーザーがブラウザーを閉じてもログアウト時間を保存することです。これが不可能な場合は、ユーザーがウィンドウを閉じるとすぐにセッションを破棄する方法を教えてください。

どんな助けでも大歓迎です。

4

3 に答える 3

2

以前は、イベント ハンドラーで同期Ajaxを実行する必要がありました。それが最新のブラウザーでも当てはまるかどうかはわかりません。非同期に移行する場合は、現実的なクライアント負荷でテストして、ユーザー間でのみ現れる競合状態に陥らないようにしてください。

クライアントからの何らかのハートビート Ajax 呼び出しを、たとえば 5 分ごとに行うことをお勧めします。このような呼び出しを 2 回続けて見逃すと、サーバー側のセッションが強制終了されます。これにより、ユーザーがログアウトしないすべての状況 (ブラウザーのクラッシュ、OS のクラッシュ、ネットワーク障害など) が処理されます。

アンロード イベントの処理に関する潜在的な問題:

  • ユーザーがアプリやサイトをいくつかのタブで開いていて、そのうちの 1 つを閉じた場合はどうなりますか? クロスタブ ログアウトがあることをユーザーに通知する必要があります。
  • ブラウザーには、ユーザーがブラウザーを閉じるのを妨げるポップアップや無限ループを防ぐために、アンロード時にできることを制限してきた歴史があります。将来何が起こるかわかりません。履歴はこちら: http://www.hunlock.com/blogs/Mastering_The_Back_Button_With_Javascriptおよび上記の返信の StackOverflow リンク経由。
于 2012-04-16T12:51:27.763 に答える
0

これは質問の最後の部分に答えます。ブラウザを閉じてセッションを自動的に閉じます。ウィキペディアによると: Cookie の作成時に有効期限または有効期間が設定されていない場合、セッション Cookie が作成されます。通常、Web ブラウザーは、ユーザーがブラウザーを閉じると、セッション Cookie を削除します。

当面のタスクは、 を使用して有効期限のない Cookie を作成することExt-state-CookieProviderです。構成をまったく省略すると、 ExtJSexpiresはデフォルトで 7 日間に設定します。これについてはソースを確認してください。expiresしたがって、次のように明示的に null を指定して Cookie を作成する必要があります。

var cp = Ext.create('Ext.state.CookieProvider', {
    expires: null
});

ブラウザを閉じると、すべての Cookie 値が削除されます。

于 2014-09-22T14:14:07.683 に答える
0

この回答に従って、beforeunloadイベントを処理してから AJAX ログアウトを実行できるはずです。

テストされていませんが、次のように動作するはずです。

Ext.EventManager.on(window, 'beforeunload', function() {
  Ext.Ajax.request({
    url: 'logout.json',
    timeout: 60000
  });
});
于 2012-04-14T10:01:28.530 に答える