- - PR -
 
session.invalidate()をしてもSessionが破棄されない
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
  | 
 投稿日時: 2007-02-14 10:50 
Webアプリケーション構築。セッションが破棄されません
プログラム上では、invalidate()を行う前に以下のようなことをしています HttpSession session = request.getSession(true); HttpSession http_session = request.getSession(); : Session.removeAttribute(xxxxx); : http_session.invalidate(); アプリケーションサーバはresin2.1です。 resin.confの中のSessionTAGはデフォルトのままです。 <session-config> <session-max>4096</session-max> <session-timeout>30</session-timeout> <enable-cookies>true</enable-cookies> <enable-url-rewriting>true</enable-url-rewriting> </session-config> 外国のサイトでみたのですが、ResinのConfigにTAGを追加すれば、破棄できるようになるというようなことが書かれていてました。(どれかは書いていませんでしたが・・・)、どのTAGがそれにあたるのか?決め手にこまっているところです。 どなたかご存知の方がいらっしゃれば教えてください。  | ||||
  | 
 投稿日時: 2007-02-14 11:06 
すいません。
追記です。 以下はweb.xmlに設定してあります。 <session-config> <session-max>4096</session-max> <session-timeout>30</session-timeout> <enable-cookies>true</enable-cookies> <enable-url-rewriting>true</enable-url-rewriting> </session-config>  | ||||
  | 
 投稿日時: 2007-02-14 11:17 
「セッションが破棄されない」のはどうやって確認されていますか?[ メッセージ編集済み 編集者: インギ 編集日時 2007-02-14 11:29 ]  | ||||
  | 
 投稿日時: 2007-02-14 11:57 
>「セッションが破棄されない」のはどうやって確認されていますか?
eclipseのデバック上から http_session.invalidate(); のところにブレークをはって破棄されるかみています。 (見方間違ってますか?)  | ||||
  | 
 投稿日時: 2007-02-14 12:19 
なるほど。invalidate()を呼び出しても破棄されない、のではなくてタイムアウトしない、ということですね?
Resin の実装がどうなっているかわかりませんが、タイムアウトする場合にかならずしも public なメソッドを呼び出すとは限りませんね。 HttpSessionActivationListener を使って sessionWillPassivate が呼び出されるかどうか確認してみてはいかがでしょう。  | ||||
  | 
 投稿日時: 2007-02-14 12:47 
>なるほど。invalidate()を呼び出しても破棄されない、のではなくてタイムアウトしな>い、ということですね? 
すいません。 1.初歩的なことを伺うようですが、invalidate()にブレークをはってそのままトレースしていっても、SessionIDが残っているのですが、これは、イコール:タイムアウトしないということになるのでしょうか? Sessionのタイムアウトは30分にしており、このSessionタイムアウトはちゃんとできているようです。  | ||||
  | 
 投稿日時: 2007-02-14 13:32 
 sessionWillPassivate はレプリケーション/セッション永続化のためにシリアライズする時に呼び出されます。session.invalidate()では呼び出されません。 session.invalidate() を捕まえたいなら HttpSessionListener の sessionDestroyed の方です。 簡単に本当に無効化されたか不安なら session.setAttribute() で java.lang.IllegalStateException が発生するかどうか確認すればいいのでは?  | ||||
  | 
 投稿日時: 2007-02-14 14:06 
>簡単に本当に無効化されたか不安なら session.setAttribute() で 
>java.lang.IllegalStateException が発生するかどうか確認すればいいのでは? を確かめてみました。 http_session.invalidate(); の後に session.setAttribute("aaaaaa","bbbbb"); としてみたところ 、java.lang.IllegalStateException が発生しました。 これは、無効化されたということでいいですか? でも、ecliplseのデバッグ上でsessionの中身をみると、sessionIDは取得した値がそのまま入っています。 これは、当たり前? 破棄するということは、Session自体新しいものにかわるということではないのでしょうか? また、初歩的ですいません。。。  | ||||
