セッションスコープについての備忘録
(個人的な気付きをまとめたものです。読みにくかったりするかもしれませんが、ご了承ください。)
基本的な使用方法
セッションスコープはユーザーごとに割り当てられたHttpSessionクラスのインスタンスです。
request.getSession()を使用したタイミングでインスタンスが作られると同時に、各ユーザーにIDが自動的に割り振られる。
以後アプリケーションサーバーはそのIDに対応するインスタンスに対し、setAttribute("a",a)で保管した情報をgetAttribute("a")で返すことができる。
なお、サーバー側からはユーザーがブラウザを使用しているか確認できないため、
HttpSessionインスタンスが使用されないままある一定の時間が経過すると、
セッションタイムアウトという機能が実行され、消去されます。
ですがそれでも長時間保持することとなるので、removeAttribute("a")を使用して
積極的に消去した方が良いらしい。
またinvalidate()を使用してセッションスコープごと消す方法もあるらしいが、
これはユーザーがログアウトした際などに使用されるようです。
また、HttpSessionインスタンスはサーバー停止中も直列化(バイト列に変換すること。バイト列とは人間の読めない、0と1が並んだものである)されファイルに保管される。
この時直列化されても大丈夫なように、HttpSessionインスタンスに保管するインスタンスは直列化可能、つまりjava.io.Serializableインターフェースを実装している必要がある。
気を付けるべきこと
今回僕がこれを書こうと思ったきっかけでもある、setAttribute()とgetAttribute()の属性名について書いておく。
この属性名とは、自分で決めることができる。ぼくはてっきりクラス名だと考えていたので、青天の霹靂のように感じた。属性名って書いてるんやから、早い段階で疑いを持てればよかった、、、
属性名とはクラス名のことだと考えていたので、スネークケースで名前を書いていましたが、可読性も悪く、保守の面でよくないと考え、今後は気を付けようと思います。
振り返り
今回初めて記事にして反省したが、頭の中が整理されて知識の定着にも良い気がする。
現在は大学を中退してプログラミングを学んでいるわけだが、これが就職に結びつくように努力したいと思う。
結論!セッションスコープは難しいけどサーバーのためにも積極的に管理するべし!