- - 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自体新しいものにかわるということではないのでしょうか? また、初歩的ですいません。。。 |