【Web初心者】セッションのしくみ

本記事では、Web開発などを行なっているとたびたび目にするセッションについて解説していきます。

セッションとは

WebブラウザとWebサーバのやり取りの関連性のある一連の処理をセッションと呼びます。

Amazonなどのショッピングサイトで、商品検索→商品選択→商品購入などの繋がっている一連の流れがセッションに該当します。

セッション管理の仕組み

インターネット上に公開されているサイトなどを保持しているWebサーバーは常に多数のクライアントであるWebブラウザからアクセスされています。

そのため、1つ1つのWebブラウザからの一連の関連性を持ったリクエストをセッションとして扱う場合にはCookieなどを用いてセッションを管理することがございます。

Cookieについては以下の記事をご覧ください。

セッション管理において、1つ1つのWebブラウザを識別するための情報セッションIDと呼び、セッションIDはWebサーバで発行し、Cookie内の情報の1つとしてレスポンスと一緒にWebブラウザに渡されます。

Webブラウザ側は、関連する一連の処理の2回目以降のリクエスト時にセッションから送信されたセッションIDを含むCookieを送信することでセッション状態を維持することができます。

セッション内で行なった「何の商品を購入したのか」などの情報はセッションIDと紐づけられてセッションデータとしてWebサーバ内に保存されます。

そのため、クライアントはセッションIDを利用することで、Webサーバ上に保存されている自らのセッションデータを参照することもできます。

Cookie内に格納されるセッションIDには有効期限が存在しており、ブラウザを閉じる。あるいはWebサーバ側で設定した時間まで使用することができます。

有効期限を過ぎると、再度同一のWebサーバにアクセスした際には新しいセッションIDが発行され、それまでに使用していたセッションIDは破棄されるため、古いセッションIDに紐づくデータは参照できなくなってしまいます。

セッションIDの受け渡し方法

前の章でもお伝えした通り、セッションIDの受け渡し方法として最も一般的な方法としてはCookie内に格納してやり取りを行う方法です。しかし、一部ブラウザなどではCookieを利用できない場合もございます。

代替方法として利用されるのが、URL内にセッションIDを埋め込む方法、Webページのフォーム内に埋め込んで送信するデータの1つとする方法です。

URL内に埋め込む

セッションIDをURLに埋め込む方法はその言葉通り、以下のようにURLの後ろにパラメータとしてセッションIDを渡す方法です。対象のURLの後ろにセッションIDであることを示す「?SID=」がつき、その後ろにセッションIDが記載されます。

この方法は、実際にURLを盗聴されたり、なりすましをされた場合に簡単にセッションIDを盗まれて悪用されてしまうリスクが高いためあまり利用されておりません。

hhtps://example.com/index?SID=12345

Webページのフォーム内に埋め込む

Webページのフォーム内に埋め込む方法は、最初にWebサーバからWebブラウザにレスポンスとしてHTMLデータを送信する際にページ内に隠し要素を埋め込んで送信し、2回目以降のWebブラウザからのリクエストにも同様の隠し要素を埋め込んだ状態でセッションIDをやり取りするといった形式になっています。

HTMLの中のデータとして送信されますが、隠し要素であるため普通にWebページを閲覧しているだけでは見た目には見えず、例えば以下のような形式で送信されています。

以下の例では、formタグ内にinputタグが設定されていますが、typeがhiddenとされていることで表面的には見えないようになっています。また、セッションIDであることを示すためにname属性の値がSIDとなっており、valueに実際のSIDが示されるようになっています。

<form>
  <input type="hidden" name="SID" value="12345">
</form>

見た目では見えない要素として一見すると安全なようにも感じますが、実際にはデベロッパツールなどで簡単にWebサイトを構成するHTMLは確認できてしまうため、情報漏洩のリスクは高い手法の1つとしてあまり利用はされていません。

最後に

セッションについての説明はいかがだったでしょうか。

本記事では、ステートレスな通信を行うプロトコルであるHTTP通信に密接に関わるセッションについて書いてきましたが、他にもCookieについてやWebに関する記事を書いておりますので、ぜひそちらもご覧ください。