フルスタックエンジニアのノウハウ
2020.03.11    2022.06.12

セッション変数を使う

この記事の動画版はこちら(画像クリックでYoutubeに飛びます)

チャンネル登録お願いします!


前回は、Webプログラムでデータを引き回す方法として「hidden」というHTML要素を使う方法をご説明しました。


前回の記事をまだ見ていない方は、こちらからご確認ください。

関連記事

hiddenを使う



hiddenが使えない場合とは?


サーバーはリクエストをまたいでデータを覚えていてくれませんが、hiddenを使ってデータを保持させておくことで、複数のリクエスト間でデータを引き回すことが出来ます。


しかし、hiddenのデータはブラウザでHTMLソースを覗けば誰でも簡単に見ることが出来てしまい、偽装されやすくセキュリティ的に危険なため、重要なデータは持たせられません。


また、ログイン情報やショッピングカート情報など、ユーザーがたくさんの画面を遷移する間ずっと保持しておきたいようなデータもあります。


こういったデータを全ての画面にhiddenで持たせて引き回すのは大変です。


 こういった場合は「セッション変数」というものを使います。



セッション変数を使う


セッション変数というのは、サーバー上に「ユーザー専用のデータの保管領域」を確保する仕組みです。


hiddenは「画面内」に保持していたのに対し、セッション変数は「サーバー内」にデータを保持します。


サーバーは多くのユーザーが同時に使っていますので、自分の保管領域にデータを出し入れするための「専用のキー」が発行されます。


これを「セッションID」と言います。


例えると、銀行の貸金庫のようなイメージです。



サーバーに保管しておいたデータを、自分のセッションIDを使って出し入れします。


ログイン情報や、ショッピングカート情報など、複数の画面遷移の間ずっと保持させたいデータは、セッション変数に格納しておくことで、好きな時に取り出すことが出来ます。




hiddenのように、HTMLソースにデータが記載される訳でもありませんので、重要なデータを保持することも出来ます。


※ただし、セッションも偽装されるリスクはありますので注意が必要です。(Webアプリケーションのセキュリティ対策についてはまた別の機会にお話しします)



データ保持期間によって使い分けよう


セッション変数はユーザーがWebプログラムを操作している間は保持されていますが、操作が終了して一定時間が経つと破棄されます。


永続的にデータを保存しておけるものではありませんので、あくまで「ユーザーがWebプログラムを操作している間」保持させたいデータに使用します。


ユーザーが操作を終了した後も永続的に保持しておきたいデータは、データベースに保存します。


【データ保持期間による使い分け】

【短】短い画面遷移間:hidden
【中】ユーザー操作中:セッション変数
【長】永続的に保持:データベース



セッション変数の注意点


セッション変数は便利なのですが、全ユーザーのデータをサーバー内で保持するため、調子に乗って多くのデータをセッション変数に保管してしまうと、サーバーの負荷が高くなってしまいます。


また、通常は1リクエストで破棄されるデータが保持され続けるため、思わぬバグの発生にもつながりやすくなります。


 セッション変数を使う場合は、格納するデータは「必要最小限」とし、セッション変数をクリアするタイミングをしっかり設計するようにしましょう。



まとめ


 重要なデータや、ユーザーの操作中保持しておきたいデータはセッション変数を使う。
 セッション変数に格納するデータは必要最小限にする。
 セッション変数をクリアするタイミングをしっかり設計する。
 操作終了後も永続的に保持しておきたいデータはデータベースに格納する。


データベースについては以下の記事もご参考にしてみてください。

関連記事

データベースの基礎知識【実例を交えて説明】


おすすめ記事