関連記事
セッション変数とは?
この記事の動画版はこちら(画像クリックでYoutubeに飛びます)
セッション変数とは?
結論から先に言うと、
セッション変数とは、サーバー上に「ユーザー専用のデータの保管領域」を確保する仕組みです。
Webアプリケーションでは、いくつもの画面を遷移しながら機能を利用していきますが、ある画面で入力・処理されたデータを別の画面でも使いたいと思ったら、何らかの方法でデータを引き渡す必要があります。
例えば、ネットショップの注文画面でユーザーが入力したお名前や住所などの情報を注文確認画面、注文完了画面などで表示する場合は、入力された各種データをこれらの画面に引き渡してあげる必要があります。
データを引き渡す方法としては、HTMLの「hidden」タグを使う方法があります。
hiddenを使えば、ユーザーの画面上には表示させずにデータを内部的に保持しておくことができますので、hiddenを各画面に設置しておけば、必要なデータを引き渡すことができます。
hiddenが使えない場合とは?
しかし、hiddenのデータはブラウザ上でHTMLソースを開けば誰でも簡単に見ることが出来てしまい、偽装もされやすくセキュリティ的に危険なため、重要なデータは持たせられません。
また、ログイン情報やショッピングカート情報など、ユーザーがたくさんの画面を遷移する間ずっと保持しておきたいようなデータもあります。
こういったデータを、アプリ内の全ての画面にhiddenを設置して引き回すのは大変です。
こういった場合は「セッション変数」を使います。
セッション変数を使う
セッション変数は、サーバー上に「ユーザー専用のデータの保管領域」を確保する仕組みです。
hiddenは「各ユーザーの画面内(HTML)」にデータを保持していたのに対し、セッション変数は「サーバー内」にデータを保持します。
サーバーは多くのユーザーが同時に使っていますので、自分の保管領域にデータを出し入れするための「専用のキー」が発行されます。
これを「セッションID」と言います。
例えると、銀行の「貸金庫」のようなイメージです。
サーバーに保管しておいたデータを、自分のセッションIDを使って出し入れ出来ます。
ログイン情報や、ショッピングカート情報など、複数の画面を遷移する間ずっと保持させておきたいようなデータは、このセッション変数に格納しておくことで、hiddenを設置しなくても好きな時に取り出すことが出来ます。
また、hiddenのように、HTMLソースにデータが記載されてしまうこともないため、重要なデータを保持することも出来ます。
ただし、セキュリティ対策に不備がある場合、セッションも偽装されるリスクはありますので注意は必要です。
Webアプリケーションのセキュリティ対策については、別の記事でもご説明していますので興味があれば是非学習してみてくださいね。
データ保持期間によって使い分けよう!
セッション変数は、ユーザーがアプリを操作している間は保持されますが、ブラウザを終了したり、操作が終了して一定時間が経つと破棄されます。
永続的にデータを保存しておけるものではないため、あくまで「ユーザーがアプリを操作している間だけ」保持させたいデータに使用します。
例えば、先ほど例に挙げた「ユーザーのログイン状態」や「ショッピングカートの情報」、「入力情報の一時的な保管」などですね。
逆に、ユーザーが操作を終了した後も永続的に保持しておきたいようなデータは、データベースに保存します。
例えば、「アカウントデータ」や「注文履歴データ」、「商品データ」などはデータベースに保存しておきます。
データベースについては、こちらの記事で解説していますので併せて学習してみてください。
利用シーンをまとめると、こんな感じです。
1-2画面の画面遷移間だけ、保持させておきたいようなデータは「hidden」を使う。
ユーザーがアプリを操作している間中、ずっと保持させておきたいようなデータは「セッション変数」を使う。
ユーザーがアプリの操作を終了した後も、ずっと保持させておきたいようなデータは「データベース」を使う。
このように使い分けるようにしましょう!
セッション変数の注意点
このように、セッション変数は便利なのですが、全ユーザーのデータをサーバー内で保持するため、調子に乗って多くのデータをセッション変数に保管してしまうと、サーバーの負荷が高くなってしまいます。
また、通常は1リクエストで破棄されるデータがずっと保持され続けるため、不要なデータが残ってしまったりして、思わぬバグの原因にもつながりやすくなります。
セッション変数を使う場合は、格納するデータは「必要最小限」とし、セッション変数をクリアするタイミングをしっかり意識するようにしましょう!
まとめ
・セッション変数とは、サーバー上に「ユーザー専用のデータの保管領域」を確保する仕組み
・重要なデータや、ユーザーがアプリを操作している間保持しておきたいデータに使う
・格納するデータは必要最小限にする・クリアするタイミングをしっかり意識する
・操作終了後も永続的に保持しておきたいデータはデータベースに格納する