[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 メーリングリストの案内