今日はセッション管理についてちょっと業務中に調べて知識を入れたので、忘れないうちに備忘録を残しておこうと思います!
- セッションの利用
- セッションを利用することによるメリット・デメリット
- セッションを利用しないことによるメリット・デメリット
- セッションに格納したオブジェクトの削除
- どうやって削除するのか?
- 関連記事・オススメ記事
セッションの利用
Webアプリケーションは、HTTPを使ってクライアントとサーバでデータのやり取りを行います。
HTTP自体には物理的にセッションを維持できない。
なので、セッションを識別できるようにセッションIDという値をクライアントとサーバで連携して、セッションを維持している。
クライアントとサーバの間でセッションIDの連携をする方法として、cookie(クッキー)かリクエストパラメータが使われる。
複数の画面を移動するときに、データを持ち回りしたい場合はそのデータをセッションに格納することで、画面間で持ちまわることができる。
セッションを利用することによるメリット・デメリット
セッションを使うことによるメリットとデメリットは下記の通りです。
- メリット
- 画面間でデータを持ちまわることができるので、複数の画面で1つの処理をするという場合にデータの持ち回りが簡単
- セッションに格納しておくことによって、データを取得する処理の回数を減らせる
- デメリット
- 同じ処理をする画面を、複数のタブやブラウザで開いてしまうと、それぞれの操作がセッション上のデータを干渉するので整合性を保てない
- セッションがアプリケーションサーバのメモリとして管理されるので、セッションで格納するデータが増えるほどメモリの増加量も増える
- データをセッションに格納することによって、APサーバの拡張性(スケーラビリティ)を低下させることになりえる
セッションを利用しないことによるメリット・デメリット
逆にセッションを使わないことによるメリットとデメリットは下記の通りです。
- メリット
- サーバ側でデータを持たないことになるので、画面を複数のブラウザやタブで開かれてもデータを干渉しない。
- サーバ側でデータを持たないので、メモリの使用量を抑えることができる。
- デメリット
セッションに格納したオブジェクトの削除
セッションで格納したオブジェクトは、ほっておくとメモリ枯渇の要因になるので削除してあげる必要があります。
以下3つのケースでセッションのオブジェクトを削除しなければなりません。
- 完了画面を表示する時のリクエスト
- 画面操作を途中で中止する時のリクエスト
- 入力画面を初期表示する時のリクエスト
それぞれ理由を解説していきます。
完了画面を表示する時のリクエスト
完了画面を表示してしまうと、セッションに格納したオブジェクトにアクセスすることがないので、いらないオブジェクトを削除する必要がある。
入力画面を初期表示する時のリクエスト
登録画面などの入力できる画面での入力情報はセッションに格納されているフォームに残ります。
再度画面を表示する時に、セッションに残っている情報から画面に表示されてしまいます。
なので初期表示する時にはセッションを削除しておく必要があります。
どうやって削除するのか?
@SessionAttributesでセッションに格納したオブジェクトを削除したいという時は、SessionStatusクラスのsetCompleteというメソッドを
Controllerの処理から呼び出します。
setCompleteメソッドを実行すると@SessionAttributesアノテーションの属性値に指定しているオブジェクトがセッションから削除されます。
↓Springのアノテーションについてはこちらの記事でまとめています↓
www.engineer-wataru.com