• ベストアンサー

Javaでのセッションについて

質問があります。 ServletでSessionを用いるときににまず初めに、 /*セッションの開始*/ HttpSession session = req.getSession(); というふうにすると思います。 ここで、HttpServletRequestのメソッドとしgetSessionがあるわけですが、 セッションというのはリクエストから受け取り開始するものなのですか? 私の解釈では、リクエスト→セッション→コンテキストという順番でスコープが広くなっていると認識しています。 なのになぜ、リクエストからセッションを受け取るのかが疑問でなりません。 また、ブラウザで×ボタンを押すとセッションは終了すると思いますが、 この時にもし、セッション上に明示的に解放しなければならないBeanなどをあげていた場合、 どうやって解放してあげればいいのでしょうか。 たぶん、大きな勘違いをしていると思うのですが、 どなたかご教授願いますでしょうか。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • qazwsxe
  • ベストアンサー率20% (2/10)
回答No.3

Sessionが存在するのはあくまでサーバー上です。 リクエストから取得できるSessionというのはセッションのIDのことだと思います。 ブラウザはクッキーの中のSessionIDをリクエストのヘッダー情報に含めて送信、 サーバーは受け取ったSessionIdに対応するSessionがあるかどうかを見て、あれば有効なセッションとして処理します。 ×を押したときには、ブラウザが使用していたメモリ中の SessionID情報がなくなるので、ユーザーはセッションが終了したように感じますが、 サーバーでは、そのセッションIDから最後にアクセスのあったときから、設定してあるセッション有効期間の間生きています。 ブラウザが閉じたときに消滅するクッキーは、セッションクッキー(?)で、ファイルのクッキーを発行すると、次にアクセスしたときにも、セッションの有効期限内であればセッションが有効です。 明示的にセッションを消滅させることもでるとおもいます。

その他の回答 (2)

  • tyoufu
  • ベストアンサー率28% (19/67)
回答No.2

答えられる部分だけですが、 明示的にSessionを開放するのは invalidateメソッドで出来ます。

  • chi-kon
  • ベストアンサー率43% (58/132)
回答No.1

素人の意見ですが、、、 逆に考えてみたらどうでしょうか? リクエストは自分が属しているセッションをしっている。(uniquに決められる) セッションは自分が属しているコンテキストをしっている。(uniquに決められる) コンテキストは自分にどんなセッションがあるかは知らない。(uniquに決められない) セッションは自分にどんなリクエストがあるかは知らない。(uniquに決められない) あと、×ボタンに関してですが、 明示的に「解放」が必要なものをBeanに入れっぱなしにしておかない。っていう方針でどうでしょうか? なにが入っているのかはわかりませんんが。。。

関連するQ&A