まるはち サーブレットとJSP 8:)
今回は
8章〜
セッションスコープについて
リクエストスコープにはリクエストをまたいでインスタンスを共有できないという限界があった
その限界を克服するのがセッションスコープである
セッションスコープに保存したインスタンスは基本的に利用者がブラウザを閉じるか開発者が明示的にインスタンスを削除するまで利用可能
保存したインスタンスがレスポンス後も残るためリダイレクト先などリクエストをまたいで利用できる
HttpServletRequestインスタンスのgetSession()メソッドを呼ぶとjavax.servlet.hhtp.HttpSession型のインスタンスが取得できる
このインスタンスこそがセッションスコープの正体!
セッションスコープに保存したインスタンスはremoveAttribute()メソッドで削除
JSPファイルでセッションスコープを使う場合暗黙オブジェクトsessionを使用
セッションスコープの正体であるHttpSessionインスタンスはユーザー(ブラウザ)ごとに作成される
アプリケーションサーバはHttpSessionインスタンスを作成すると内部でセッションIDというものを発行しHttpSessionインスタンスとブラウザに設定することで両者を紐づける
クッキーとはWebサーバがブラウザにデータを保存、送信させる仕組みで
サーバがレスポンスにクッキーと呼ばれるデータを含めるとレスポンスを受信したブラウザはクッキーをコンピュータに保存し、以後そのサーバにアクセスする際には、保存したクッキー情報を自動的にHTTPリクエストに付加して送信するようになる
アプリケーションサーバはクッキーにセッションIDを含めブラウザとサーバ間でのセッションIDのやりとりを可能にする
クッキーには有効期限が設定できる
ブラウザを開きなおしてもセッションIDの有効期限が切れるまでセッションスコープを継続して利用できる
セッションスコープの注意点
セッションスコープを多用するとアプリケーションサーバがメモリ不足になる(HttpSessionインスタンスがブラウザから使われなくなってもすぐに消滅しないから)
アプリケーションサーバは一定時間利用されていないHttpSessionインスタンスについては不要と判断しガベージコレクションの対象とする(セッションタイムアウト)
でもやっぱり開発者がセッションスコープに格納するインスタンスを積極的に管理したほうがいい
session.invalidate()でセッションスコープを破棄する
これは典型的にユーザーがログアウトを行った時用いる
8章はこんな感じ
よくセッションがタイムアウトしましたとか出てくることあったけどこれのことだったんだな〜
p226が微妙な気がするし全体的にスコープのところは何周かしたほうがよさそう
全体像はざっくりわかってるけど細かいところを実践と一緒にうめていかなきゃな〜
次は9章アプリケーションスコープだ!