|
|
SledgeによるWebアプリケーションフレームワーク入門 |
第2回:セッション管理
著者:ライブドア 谷口 公一 2005/6/15
|
|
|
前のページ 1 2 3 4 次のページ
|
|
セッションの実装
|
セッションという概念をWebアプリケーション上に実装する際には「キーの受け渡し」をする機構が必要であるということはおわかり頂けたかと思います。この場合の「キー」は「Session ID」と称され、一連のセッションに対しての識別子(ID)を指します。
では、一般的にどのように「キーの受け渡し」を行なえばよいのでしょうか。
|
Cookieという魔法
|
かつてのNetscape Communications社が、従来のHTTPの拡張機能としての"HTTP Cookie"(Magic Cookieとも呼ばれる)というしくみを提唱し、現在ではRFC 2965で定められ、一般的なブラウザでは標準的に備えています。
詳細な仕様については上記URLをご覧頂くとして、簡単に言えば、サーバ側から利用者のブラウザに対して、「ドメイン・URLのパス・プロトコルが指定と一致するページを有効期限内に訪れた際には、必ずこのデータと同じものをリクエストに含めて返してください」という指示をHTTPレスポンスに含めるというものです。
容量/個数の制限内であれば、それは利用者側のストレージへ保存され、指示にしたがい、条件に合致する先に対してそのデータを返します。そのため、Webアプリケーションは一意な値をHTTP Cookieに含めて利用者に渡すことにより、どの利用者がどの値を持っているかを管理することができます。
つまり、次にその値をリクエストに含めた人が再び訪れた時に、その人が誰なのか、今までどんな操作を行なったのかをWebアプリケーション側で把握することができます。ホテルにおける「キーの受け渡し」に非常に似ているのではないでしょうか。
ここで、利用者に発行するCookieに一意の小さなデータではなく、ユーザのすべての操作・情報等を保存させることも、Cookieの仕様上では可能です。しかし、Cookieの値というのはユーザ側から操作することもできるため、セキュアなWebアプリケーションであるとは言えなくなってしまいます。
そのため、「類推されにくい一意な情報の小片のみを送る」というのが一般的な実装方法です。その小片をSession IDとし、そこに紐付ける情報はサーバ側に保存しておくことによって、外部からの情報改竄を防ぐことが可能となります。
|
PATHやQUERY_STRINGに含める方法
|
Cookieの受け渡しは多くのブラウザで標準的に備えられた機能ですが、携帯電話の場合、キャリアやブラウザのバージョンによってはCookieという機構そのものが備えられていないというケースもしばしばあります。そのため、次によく見受けられるSession IDの実装方法として、URLのPATHやQUERY_STRINGに含めるという手法が存在します。
QUERY_STRINGにSession IDを含める場合、注意しなくてはいけないのは、そのユーザが今後送ってくるリクエストのすべてに対して、常にSession IDを送らせるような機構を組み込まなくてはいけないという問題があり、その機構の実装は非常に難しくなっています。
PATHに含めるという方法のほうが一般的で、例えばApacheで実装する場合は、httpd.conf内の設定に下記の内容を記述します。
|
RewriteEngine On
RewriteRule ^/sid=([^/]+)/(.*) /$2 [E=SESSIONID:$1]
|
これはmod_rewriteの機能を用いています。これにより、「/sid=」から始まるURLのPATHの場合、以降に続く文字列が、環境変数SESSIONIDに設定され、実際のリクエストは、次の「/」以降に続くPATHへ送られるようにすることが可能です。
これにより、例えば「/sid=abcd1234/foo」から見た「./bar」は、絶対PATHで表現すると「/sid=abcd1234/bar」となり、ブラウザに対して容易にSession IDを送らせることができます。
実際、携帯電話の場合は、キャリアによっては端末毎に固有の識別子を持つものも存在するため、その端末識別子に対してセッションの情報を紐付けてしまうという実装方法が一般的に行なわれています。
|
前のページ 1 2 3 4 次のページ
|
|
|
|
著者プロフィール
株式会社ライブドア 谷口 公一
テクニカルディレクター。専門知識が全く無い中、オープンソースソフトウェアやコミュニティからシステム開発の知識やノウハウを習得し、オープンソースコミュニティにおいて活発に活動を行っている同社に憧れて入社。現在はポータルサイト「livedoor」におけるサービス開発を行う一方、本業の傍ら、お世話になっているオープンソースコミュニティへのコントリビューションも行なっている。
|
|
|
|