• 締切済み

HttpSessionListenerクラスに関して

HttpSessionListenerクラスに関して (1) セッションタイムアウト時にHttpSessionListenerを呼ぶ場合、 セッションタイムアウトエラー画面に遷移させたいのですが、 RequestDispatcher rd = sc.getRequestDispatcher("/jsp/error3.jsp"); rd.forward( request, response ); が使えないため困っております。 他に何かやり方があるのでしょうか? 教えて下さい。 (2) 多重ログイン防止のために、ログイン時にログインしたユーザーはフラグを変更させてログイン中と判定しようと考えているのですが、ログアウト時はフラグを戻せばいいかと思いますが セッションタイムアウト時は、どのユーザーがログインしていたか分からなくなってしまうため フラグを変更できず、永遠にログイン状態になってしまうのではないかと思い困っています。 多重ログイン防止する方法を教えて下さい。

みんなの回答

noname#114415
noname#114415
回答No.3

> (1)に関しては、セッションタイムアウト時に即座に遷移する方法を考えています。 であれば、画面からサーバへ逐一リクエスを投げてセッションがタイムアウトしているか問い合わせる仕組みが必要です。実装はJavaScriptになります。 サーバからクライアントへのメッセージポスト方法は、Webアプリケーションではありません。 >(2)に関しては、セッションにログイン情報を保持していればできると言う事ですか。 >ログイン情報を保持しているのですが、後からログインして来た方をログインさせて、先にログインしている方をログアウトさせる方法が分かりません。 ログイン情報はどこに保持してあるのですか? 多重ログインでそのような処理を実装しようとすれば、セッション情報をコンテナやDBなりで管理する必要がありそうです。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

(1) エラー画面への遷移をするのは HttpSessionListenerではなく web.xmlにまかせればいいのよ。 SessionTimeoutExceptionとか作ればいいわ。 もっともServletContextのインスタンスは取得可能だけど。 (2) そのユーザー情報とフラグはどこに保持するの? まずはそれを決めなくちゃね。 そもそもユーザー情報が存在しているってことは ログイン中だとすればいいんじゃないかしら?

toetou
質問者

補足

回答ありがとうございます。 (1)に関しては、web.xmlにまかせる方法を調査したいと思います。 (2)に関しては、DBかsessionでログイン情報を保持していれば良いということですよね。

noname#114415
noname#114415
回答No.1

(1) HttpSessionListener#sessionDestroyed は、セッションが無効になった際に呼び出されるメソッドで、HTTPのレスポンスとは無関係なので使い方が間違っています。 セッションタイムアウト時に即座に遷移するのか、リクエスト時にセッションが無効になっているか判定して遷移するかによって、やり方は変わってきます。 (2) は、意味が分かりません。 ログイン時に、セッションにログイン情報を持っていれば HttpSessionListener#sessionDestroyed を使えば実現できるはずです。

toetou
質問者

補足

回答ありごとうございます。 (1)に関しては、セッションタイムアウト時に即座に遷移する方法を考えています。 (2)に関しては、セッションにログイン情報を保持していればできると言う事ですか。 ログイン情報を保持しているのですが、後からログインして来た方をログインさせて、先にログインしている方をログアウトさせる方法が分かりません。

関連するQ&A