- PR -

session.invalidate()をしてもSessionが破棄されない

投稿者投稿内容
未記入
会議室デビュー日: 2006/04/15
投稿数: 13
投稿日時: 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がそれにあたるのか?決め手にこまっているところです。
どなたかご存知の方がいらっしゃれば教えてください。
未記入
会議室デビュー日: 2006/04/15
投稿数: 13
投稿日時: 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>
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-02-14 11:17
「セッションが破棄されない」のはどうやって確認されていますか?

[ メッセージ編集済み 編集者: インギ 編集日時 2007-02-14 11:29 ]
未記入
会議室デビュー日: 2006/04/15
投稿数: 13
投稿日時: 2007-02-14 11:57
>「セッションが破棄されない」のはどうやって確認されていますか?
eclipseのデバック上から
http_session.invalidate();
のところにブレークをはって破棄されるかみています。
(見方間違ってますか?)
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-02-14 12:19
なるほど。invalidate()を呼び出しても破棄されない、のではなくてタイムアウトしない、ということですね?

Resin の実装がどうなっているかわかりませんが、タイムアウトする場合にかならずしも public なメソッドを呼び出すとは限りませんね。
HttpSessionActivationListener を使って sessionWillPassivate が呼び出されるかどうか確認してみてはいかがでしょう。
未記入
会議室デビュー日: 2006/04/15
投稿数: 13
投稿日時: 2007-02-14 12:47
>なるほど。invalidate()を呼び出しても破棄されない、のではなくてタイムアウトしな>い、ということですね?

すいません。
1.初歩的なことを伺うようですが、invalidate()にブレークをはってそのままトレースしていっても、SessionIDが残っているのですが、これは、イコール:タイムアウトしないということになるのでしょうか?
Sessionのタイムアウトは30分にしており、このSessionタイムアウトはちゃんとできているようです。
ひろ@ya
大ベテラン
会議室デビュー日: 2006/02/23
投稿数: 168
投稿日時: 2007-02-14 13:32
引用:

インギさんの書き込み (2007-02-14 12:19) より:
HttpSessionActivationListener を使って sessionWillPassivate が呼び出されるかどうか確認してみてはいかがでしょう。


sessionWillPassivate はレプリケーション/セッション永続化のためにシリアライズする時に呼び出されます。session.invalidate()では呼び出されません。

session.invalidate() を捕まえたいなら HttpSessionListener の sessionDestroyed の方です。

簡単に本当に無効化されたか不安なら session.setAttribute() で java.lang.IllegalStateException が発生するかどうか確認すればいいのでは?
未記入
会議室デビュー日: 2006/04/15
投稿数: 13
投稿日時: 2007-02-14 14:06
>簡単に本当に無効化されたか不安なら session.setAttribute() で
>java.lang.IllegalStateException が発生するかどうか確認すればいいのでは?

を確かめてみました。
http_session.invalidate();
の後に
session.setAttribute("aaaaaa","bbbbb");
としてみたところ 、java.lang.IllegalStateException が発生しました。
これは、無効化されたということでいいですか?
でも、ecliplseのデバッグ上でsessionの中身をみると、sessionIDは取得した値がそのまま入っています。
これは、当たり前?
破棄するということは、Session自体新しいものにかわるということではないのでしょうか?
また、初歩的ですいません。。。

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