Webアクセスは単一ページで完結してしまう

HTTPは、もともとハイパーテキスト、すなわちHTMLファイルの転送に利用するプロトコルです。単純にWebサイトを見るときは、WebサーバアプリケーションはWebブラウザからWebページのリクエストを受け取り、レスポンスとしてWebページの内容を送り返してWebアクセスの通信は終了します。

ところが、Webアプリケーションでは、1つのWebページの表示だけでは処理が完結しません。複数のWebページにまたがって処理を行うことになります。たとえば、オンラインショッピングを考えると、商品ページから購入したい商品をカートに入れます。そして、カートのページから決済ページで決済を完了させるというように複数のWebページをまたがって処理を行います。複数のWebページにまたがって同じクライアント(Webブラウザ)からのアクセスであることをきちんと識別して処理を行わなければいけません。

セッション管理によって、特定のクライアント(Webブラウザ)からの複数のWebページにまたがったWebアクセスを識別して、Webアプリケーションでの一連の処理を正しく行うことができます。

セッション管理の概要

セッション管理のために、最初にWebブラウザからのリクエストを受け取ったときにWebサーバ側で通信セッションを識別するセッションIDを発行します。そして、WebブラウザはWebサーバにリクエストを送信するときに、セッションIDも一緒に通知します。Webサーバは、セッションIDによって一連のリクエストが同一クライアントのWebブラウザによる通信セッションであることがわかるようになります。

Webアプリケーションにおける通信セッションの管理
図 Webアプリケーションにおける通信セッションの管理

WebサーバとWebブラウザ間でセッションIDをやり取りする代表的な方法として、以下の3つあります。

  • URLリライティング
  • HTTP Cookie
  • hiddenフィールド

URLリライティング

URLリライティングは、URLにセッションIDを埋め込む方法です。WebサーバからのリプライとなるWebページのすべてのリンクにセッションIDを埋め込みます。Webブラウザがリンクをクリックすると、自動的にセッションIDが含まれたURLのリクエストを送信することになります。

HTTP Cookie

HTTP Cookieは、Webサーバが発行するCookieにセッションIDを埋め込む方法です。Webブラウザはリクエストを送信するときにCookieも一緒に送信してセッションIDを通知します。

hiddenフィールド

hiddenフィールドは、WebページのフォームのhiddenフィールドにセッションIDを埋め込みます。Webページの遷移はすべてフォームで記述し、Webページの遷移の際にはhiddenフィールドのセッションIDがWebサーバに通知されます。

セッションIDが漏えいしないように・・・

セッションIDは、第三者に漏れてしまわないように考慮しなければいけません。セッションIDが第三者に漏れてしまうと、セッションが乗っ取られてしまうセッションハイジャックの危険性があります。

URLリライティングは、セッションIDが漏れてしまう危険性一番高いです。セッションIDを秘匿するには、フォームのhiddenフィールドにセッションIDを埋め込むことが最も有効です。HTTP Cookieを利用する場合は、Cookieのsecure属性を指定して、HTTPSの通信のみCookieを送信するなどを検討します。

表 secure属性によるCookieの送信

 

secure属性なし

secure属性あり

httpの通信

送信する

送信しない

httpsの通信

送信する

送信する

TCP/IP