セッション・セッション管理
Webサイトを閲覧している時に以下のような疑問を持ったことはありますでしょうか?
- 「セッションが切れました。」というメッセージが表示されたが、よく意味が分からない…。
- Webサーバはログインユーザをどうやって識別しているんだろう…?
当ページでは上記のような疑問を解決するために、「セッション」という用語の意味や、Webサイトで各ユーザを識別するため仕組み(セッション管理)について図解で分かりやすく解説しています。
セッション(session)とは
セッション(session)とは、ブラウザ(クライアント)がサーバへアクセスを開始してから切断するまでの一連の関連性のある処理の流れのこと。
例えば会員制のWebサイトにて、ログインしてから自身のデータを閲覧してログアウトするまでの流れをセッションと呼ぶ。
セッション管理の仕組み
ユーザがWebサイトの各ページを移動する時、サーバは同一ユーザからの通信かどうかを識別しなければならない。
しかし、Webページの送受信に使われるHTTPという通信プロトコルでは、ユーザの情報を保持する機能は無い。(HTTPはステートレス)
そこで、各ユーザのセッション中の状態や情報を一時的に保持するためにセッション管理を行う仕組みが必要となってくる。
模範的なセッション管理の方法として、「Cookie」と「セッションID」と「セッション変数」を利用した方式がある。
ログイン時などのセッション開始時にサーバは個々のブラウザを識別するために「セッションID」と呼ばれる一意の識別子を生成する。
生成されたセッションIDはブラウザ側にも送られ、ブラウザ内の Cookie と呼ばれる所に保存される。
以降はブラウザがリクエストメッセージを送る際には毎回セッションIDを付加して送る。
セッション中に保持すべき情報は、セッションIDと紐づけてWebサーバ側で保持する。
この保持される情報は「セッション変数」と呼ばれ、キーと値のペア形式となっている。
セッションベース認証の動作フロー
Cookie、セッションID、セッション変数を用いてブラウザ(ユーザ)を識別する具体的な動作フローは以下の図の通り。
「❶セッションIDの発行(ログイン実行)」と「❷セッションID発効後(ログイン後)」の2段階の処理に分けて説明する。
❶セッションIDの発行(ログイン実行)
- ブラウザがログイン実行のリクエストを送ってログインに成功すると、サーバはそのユーザのセッション情報(セッションID・セッション変数)を生成する。
- サーバはレスポンスのSet-CookieヘッダにセッションIDを含めてブラウザに送る。
- ブラウザはレスポンスのSet-Cookieヘッダの値をCookieに保存する。
❷セッションID発効後(ログイン後)
- ブラウザはサーバにリクエストを送信する際、毎回Cookieに保存しているセッションIDを一緒に送る。
- サーバはセッションIDに紐付く情報(セッション変数)を参照し、動的なレスポンスを返す。
Cookieとセッション変数の比較
Cookieとセッション変数の特徴の違いは以下の表の通り。
Cookie | セッション変数 | |
---|---|---|
情報保存場所 | クライアント(ブラウザ)側 | サーバ側 |
情報保持期間 | 永続保持可能 | セッション終了(ログアウト・ブラウザ終了)時に削除 |
データサイズの制限 | 制限あり | 制限なし |
ユーザによる情報参照・改変可否 | ○ | × |