[Seasar-user:10090] Re: [Teeda] HttpSession#invalidate() に関して
Nishioka Naoto
[E-MAIL ADDRESS DELETED]
2007年 8月 23日 (木) 22:38:13 JST
にしおかです。
小林さん、ありがとうございます。
なるほど。
最初は、(結果的に)セッションを破棄するのだから、
どのタイミングでやってもOKだろう、と思っていたのですが、
確かに
・Pageクラスで処理 -> Teedaフレームワーク範囲内で処理
・Filterで処理 -> Teedaフレームワーク外で処理
(もちろん、Filterの順番に気をつけなければいけませんが)
という大きな違いがありますね。
Teedaフレームワーク外での処理(もっともブラウザに近い場所)となると、
通常のセッションタイムアウトでセッションが破棄されたのと、
ほぼ同じ状態になると思われるので、安全に破棄できそうです。
ってことで、作り直してみました。
小林さんが書かれていますように、セッションの破棄を行う
処理の終了時、ServletRequestに対してsetAttributeで
「セッションを破棄する」フラグをセットし、
Filter側では filterChain.doFilter(...)処理終了後、
そのフラグがセットされていればinvalidate()を行うようにしてみました。
(web.xmlではFilterの一番先頭側に登録)
まだ簡単なテストしかしていませんが、いい感じで動いているようです。
とりあえず、これで様子を見ようと思います。
ありがとうございました。
#ところで、Teeda側でアノテーション等でinvalidate()を行えるような
仕組みがあれば・・・と思ったりもするのですが、
あまりニーズがないのでしょうか?
Koichi Kobayashi <[E-MAIL ADDRESS DELETED]>さん:
> 小林 (koichik) です.
>
> > Filterを用いた場合はセッションを破棄するタイミングの管理が
> > 少し大変になりそう(複数のPageで破棄する可能性があるので)ということで、
> > invalidate()はあきらめ、PageクラスでHttpSessionの中身を全て破棄した後、
> > setMaxInactiveInterval(int)で非常に短い値をセットして、
> > 擬似的に破棄(?)するという方法で対応することとしました。
>
> これも微妙な気がします...
> 「HttpSessionの中身を全て破棄」ということは,
> Teeda が管理している情報も破棄してるということ
> でしょうか?
> Teeda から呼ばれる Page クラスの中で,Teeda が
> 管理している情報を勝手に破棄するというのは,
> 今は問題が無くても避けた方がいいような.
> いつ Teeda が動かなくなっても文句言えないように
> 思うので.
>
> それよりは,Teeda の処理が終わった後に
> Filter で削除する方がやっぱりいいと思います.
> 例えば Page クラスでリクエストの属性に
> セッションを破棄することを示す値を設定して,
> Filter はそれが設定されていればセッションを
> 破棄するとかであればシンプルでいいのでは
> ないでしょうか.
--------------------------------------------------------
Nishioka Naoto
Seasar-user メーリングリストの案内