ユーザーのログインを処理し、ユーザーがアプリケーションからログアウトしたときにログアウト時間を更新する Web アプリケーションを作成しましたが、ユーザーが直接 Web ブラウザーを閉じたり、何らかの問題でシステムがシャットダウンしたりすると、ユーザーのログアウト時間を更新できません。
possible way to update user logout time
そのような状況で何かを与えてください。
Webアプリであるため、クライアント側でjavascriptを想定しています。
このような場合、ブラウザのクローズ イベントでリクエストを送信する必要があります。
window.onbeforeunload = function(event) {
//send request to server .
}
次の手順は、ログアウト時間を更新するのに役立ちます。
1.各リクエストのセッションでタイムスタンプ変数を更新し続けます。
2.セッションタイムアウト中に変数値(ユーザーが最後にアクセスしたときに保持される)を取得し、ログアウトレコードを更新します。
これは、ブラウザーに依存せずにログアウト要求を送信するのに役立ちます。
次のように実装HttpSessionListener
して注釈を付けたクラスを作成できます。@WebListener()
@WebListener()
public class MyListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
Date lougOutDate=new java.util.Date();
}
}
メソッドでsessionDestroyed
は、切断の日付を取得します
このコードを実装してみてください
window.onbeforeunload = function(event) {
var isOK = confirm("Are you sure to Leave this Page?");
if(isOK)
{
// try ajax for update your table
}
}
TimeOut を使用しないのはなぜですか?
いくつかの解決策があります:
http://en.wikipedia.org/wiki/HTTP_cookie
あなたの特定のケースでは、それはセッションクッキーでなければなりません
セッション Cookie Web サイトのユーザーのセッション Cookie[14] (インメモリ Cookie または一時 Cookie とも呼ばれます) は、ユーザーが Web サイトを読んでナビゲートしている間だけ、一時メモリに存在します。クッキーの作成時に有効期限や有効期間が設定されていない場合、セッションクッキーが作成されます。Web ブラウザーは通常、ユーザーがブラウザーを閉じるとセッション Cookie を削除します。[15][16]
「ユーザーのログアウト」メッセージをサーバーに送信する Javascript を作成してみてください。このコードは、$.unload()
(jQuery を使用している場合) を使用してトリガーするかunload
、ブラウザーのネイティブ イベントにバインドする必要があります。
このような状況でログアウト時間を正確に取得する方法はありません。たとえば、インターネット接続の切断が原因である可能性があります。
いくつかの可能性:
ページの jquery でイベント beforeunload を使用します。
beforeunload イベントは、ユーザーが何らかの理由でページを離れるたびに発生します。
たとえば、ユーザーがフォームを送信したり、リンクをクリックしたり、ウィンドウ (またはタブ) を閉じたり、アドレス バー、検索ボックス、またはブックマークを使用して新しいページに移動した場合に発生します。
次のコードを使用して、フォームの送信とハイパーリンク (他のフレームを除く) を除外できます。
var inFormOrLink = false;
$(document).on('click','a', function() { inFormOrLink = true; });
$(document).bind('submit','form', function() { inFormOrLink = true; });
$(window).on('beforeunload',document, function(eventObject) {
var returnValue = undefined;
if (inFormOrLink == false) {
//do your action
}
});
編集:ここにある回答:ブラウザー ウィンドウのクローズ イベントをキャプチャする方法は?