2012-04-14 42 views
0

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

ご協力いただければ幸いです。

+0

お返事ありがとうございます – Gouse

答えて

0

this answerによると、beforeunloadイベントを処理してから、AJAXログアウトを実行する必要があります。

テストされていないが、それは次のように動作するはずです:

Ext.EventManager.on(window, 'beforeunload', function() { 
    Ext.Ajax.request({ 
    url: 'logout.json', 
    timeout: 60000 
    }); 
}); 
+0

このコードはクロムやモザのようなすべてのブラウザで動作します – Gouse

+0

非常にありがとうありがとうございました – Gouse

2

それはあなたにするために使用は、イベントハンドラで同期のAjaxをしなければなりませんでした。それが現代のブラウザでまだ真実であるかどうかはわかりません。非同期の場合は、現実的なクライアント負荷でテストして、ユーザー間にしか見えない競合状態に陥らないようにしてください。

5分ごとにクライアントからハートビートAjaxコールを呼び出すことをお勧めします。このような2つのコールが連続して欠けていると、セッションのサーバー側が終了します。これは、ユーザーがログアウトしないすべての状況(ブラウザのクラッシュ、OSのクラッシュ、ネットワークの障害など)を処理します。アンロードイベントに作用すると

潜在的な問題:

  • ユーザーは私いくつかのタブ開いてアプリ/サイトを持っており、そのうちの一つを閉じた場合はどうなりますか?クロスタブログアウトがあることをユーザーに知らせる必要があります。
  • ブラウザには、いつでもポップアップや無限ループが発生してブラウザが閉じられないようにするためにアンロード時に実行できる操作の制限があります。あなたは将来何が来るのか分からない。ここに履歴:http://www.hunlock.com/blogs/Mastering_The_Back_Button_With_Javascriptと上記の返信のStackOverflowリンクを介して。
+0

お返事ありがとう – Gouse

0

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

有効期限のないクッキーを作成するには、Ext-state-CookieProviderを使用します。 expiresの設定をそのままにしておくと、ExtJSはそれをデフォルトの7日間にします。これについてはthe sourceをチェックしてください。したがって、あなたはそうのように、ヌルの明示的なexpiresでクッキーを作成する必要があります。ブラウザを閉じるとき

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

すべてのクッキー値が削除されます。

関連する問題