- - PR -
session.invalidate()をしてもSessionが破棄されない
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-02-14 14:22
HttpServletRequest#getSession()で取得し直せば新しく作られます。 | ||||
|
投稿日時: 2007-02-14 14:41
>sessionWillPassivate はレプリケーション/セッション永続化のためにシリアライズする時に呼び出されます。>session.invalidate()では呼び出されません。
> >session.invalidate() を捕まえたいなら HttpSessionListener の sessionDestroyed の方です。 ごもっとも!間違えました。HttpSessionListenerですね。 >としてみたところ 、java.lang.IllegalStateException が発生しました。 >これは、無効化されたということでいいですか? そう思っていいでしょう。 >1.初歩的なことを伺うようですが、invalidate()にブレークをはってそのままトレースしていっても >、SessionIDが残っているのですが、これは、イコール:タイムアウトしないということになるのでしょうか? 明示的に invalidate したセッションはもう無効になっていますので、タイムアウトの対象にはなりませんね。 >でも、ecliplseのデバッグ上でsessionの中身をみると、sessionIDは取得した値がそのまま入っています。 invalidate されているかどうかしらべるのに sessionID が含まれているかどうかを調べても判断はできません。 Invalidate されているかどうかと、HttpSession のオブジェクト内部で sessionIDを保持しているかどうかというのは独立した事柄です。 >破棄するということは、Session自体新しいものにかわるということではないのでしょうか? 違います。その HttpSession が無効になってそれ以上属性のセットなどができなくなるということです。 結局何を問題とされているのかよくわからないのですが、頂いた情報からはResinのHttpSession#invalidate()やHttpSessionのタイムアウト機構は正常に働いているように見受けられます。 [ メッセージ編集済み 編集者: インギ 編集日時 2007-02-14 14:42 ] | ||||
|
投稿日時: 2007-02-14 14:42
Javaのオブジェクトのライフサイクルと論理的な意味でのSessionの無効とが
一致していないということではないでしょうか。 無効であるとフラグが立てられたSessionは操作しようとすると IllegalStateException(この状態で操作するのは不正だよ) という例外になるわけで、以後利用することができないわけですよね。 JavaVMが該当オブジェクトを何時回収するかは気にしなくてもよく、 とにかく無効とした後に継続利用することはできないということでしょう。 ブレークポイントで眺めているのはオブジェクトの存在ですよね? | ||||
|
投稿日時: 2007-02-14 16:08
>結局何を問題とされているのかよくわからないのですが、頂いた情報からはResinの>HttpSession#invalidate()やHttpSessionのタイムアウト機構は正常に働いているよう
>に見受けられます わかりました。 >HttpServletRequest#getSession()で取得し直せば新しく作られます invalidate()後のgetSessionで、ResinではIDが変わらないのでしょうか? 今現在テストしているところでは、IDはかわりません。 | ||||
|
投稿日時: 2007-02-14 16:38
皆様
Invalidateの意味がよくわかりました。 Resin.confファイルの設定により、新たなSessionIDを取得する方法もわかりました。 本当にありがとうございました。ありがとうございました。 |