Web アプリケーションを開発しました。ログアウト機能を追加したい。このために私は HttpSessionListener を使用しましたが、思い通りに動作しませんでした。
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionEvent;
public class GetActiveSessions implements HttpSessionListener {
private static int activeSessions = 0;
public void sessionCreated(HttpSessionEvent se) {
activeSessions++;
System.out.println("+ 1 session");
}
public void sessionDestroyed(HttpSessionEvent se) {
if(activeSessions > 0)
activeSessions--;
System.out.println("- 1 session");
}
public static int getActiveSessions() {
System.out.println(activeSessions);
return activeSessions;
}
}
sessionDestroyed() メソッドで (データベースを更新して) ユーザーのログアウトをマークしました。
セッションがタイムアウトの場合、コンテナーは sessionDestroyed() メソッドを呼び出し、データベースを更新しますが、明示的に session.invalidate() を呼び出すと (ユーザーがログアウト リンクをクリックすると)、値はセッション オブジェクトからバインド解除されますが、コンテナーは sessionDestroyed() メソッドを呼び出しません。そのため、データベースを更新できません。
また、ユーザーがブラウザ ウィンドウを閉じたときにユーザーをログアウトする必要もあります。
ユーザーがログアウトとしてマークされる可能性は 3 つあります。1. コンテナーごとのセッション タイムアウト。2. ユーザーはログアウト リンクをクリックします。 3 ユーザーはブラウザ ウィンドウを閉じます。
あなたの貴重なアイデアをお寄せください。