私の Web アプリでは、ユーザーがログインすると、その ID をサーブレットの有効な ID のベクトルに追加し、ログアウトするとその ID をベクトルから削除して、現在アクティブなユーザーの数を確認します。ユーザーがログアウトするのを忘れました。
<meta http-equiv="Refresh" content="30; url=My_Servlet?User_Action=logout&User_Id=1111">
タグで彼を自動的にログアウトさせます。
しかし、多くのユーザーがログアウトせずにずっとそこにいることに気付きました。ブラウザーを閉じても、手動または自動でログアウトしない理由がわかりました。そのため、ユーザー ID が有効なユーザー ID ベクトルから削除されることはありません。
だから、私の質問は、ブラウザを閉じているユーザーをどのように検出して、サーブレットがベクターから ID を削除できるようにするかです。
トンネルの終わりに光が見えますが、まだ問題があります。私のプログラムには次のようなものがあります。
アクティブ ユーザー リスト:
User_1 : Machine_1 [ IP_1 address ]
User_2 : Machine_2 [ IP_2 address ]
User_3 : Machine_3 [ IP_3 address ]
...
セッション リスナーから、どのユーザーのセッションが終了したかを知るにはどうすればよいですか。したがって、そのユーザーをリストから削除するにはどうすればよいですか?
セッションが終了したときに HttpServlet のdestroy()
メソッドが呼び出され、そこにあるユーザー ID を削除できることを期待していましたが、ユーザーがブラウザーを閉じたときに呼び出されないのはなぜですか? また、セッションが閉じたときに呼び出される HttpServlet に他のメソッドはありますか?