- PR -

HttpSessionListenerの無効化されるタイミングについて

1
投稿者投稿内容
ア太郎
常連さん
会議室デビュー日: 2004/02/03
投稿数: 22
投稿日時: 2004-03-05 19:32
「Sessionが無効化されるタイミングで、そのSessionに保持されていたユーザーを
Servletコンテキストから削除する」という処理を実装しようと、
以下のようなHttpSessionListenerを実装したクラスを作成しました。

Weblogic8.1では期待通りの動きをするのですが、
Tomcat4.1では、★印のところで下記のようなエラーが発生してしまいます。

Sessionが無効化されるタイミングというのは、J2EEアプリケーションによって、
無効化される直前・直後が変わってしまうのでしょうか?

それとも何か設定等で切り替えられるものなのでしょうか?

■ソース
public class TestSessionListener implements HttpSessionListener {
 
 public void sessionDestroyed(HttpSessionEvent evt) {
 
  HttpSession session = evt.getSession();
  String user = (String)session.getAttribute("USER"); ←★
  
  //ログイン情報があればServletコンテキストから削除
  if( userInfo!=null ){
   〜削除処理〜
  }
 }

■エラー内容
java.lang.IllegalStateException: getAttribute:
セッションはすでに無効化されています
 at org.apache.catalina.session.StandardSession.getAttribute
(StandardSession.java:942)
 at org.apache.catalina.session.StandardSessionFacade.getAttribute
(StandardSessionFacade.java:171)


山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-03-05 20:07
せっかく HttpSessionEvent で通知されて射るんだから、そこにひもついた session オブジェクトを操作できないと意味ありませんよね・・・

HttpSessionBindingListener を使って回避してはいかがでしょうか?同等の処理をするオブジェクトをあらかじめセッションに放り込んでおけば valueUnbound が呼ばれると思います。
ア太郎
常連さん
会議室デビュー日: 2004/02/03
投稿数: 22
投稿日時: 2004-03-08 10:15
レスありがとうございます。

Session無効化のタイミングで、
HttpSessionBindingEventも発生するとは知りませんでした。

試してみます。
cypher256
会議室デビュー日: 2003/11/05
投稿数: 7
投稿日時: 2004-03-08 22:32
Application スコープにユーザ情報ってあまり聞かないのですが
よろしければどういう用途か教えていただけませんか?
1

スキルアップ/キャリアアップ(JOB@IT)