まさ@ブログ書き込み中

まさ@ブログ書き込み中

まさの旅、英語、プログラミング、プライベートについて、色々記録しています。

CookieとセッションID【Web技術入門4】

 

口だけで昨日結局まとめを終わらせなかったまさです。

 

反省とともにキーボードをタタタターン!!!します。

 

 

 

これまで「Webのそもそも論」をたくさんまとめてきました。

 

HTTPはもともとHTMLで書かれた文書を閲覧するためにつくられたものですが、Cookieとセッションにより、利用者とのやりとりを一連の流れとして制御することができるようになります。

 

どういうことか、もう少し説明します。HTTPによる通信は、いくつかの他のプロトコル(例:FTP, File Transfer Protocol)と比べて連続しておらず、独立したリクエストだけで用が済むようにできています。

 

例えば、あるURLを入力した場合、HTTPは

  • HTML全体のリクエストを行います。
  • CSSスタイルシート)へのリクエストを行います。
  • 画像へのリクエストを行います。

このように、色んなことをHTTPでリクエストしますが、一つひとつのリクエストは独立しているのです。

 

それがどうした?と思う方もいるかもしれませんが、これは場合によっては問題となります。

 

例えば、あるWebページへの閲覧を一部の人だけに制限したいとしましょう。

Webサービスでよくある「ログイン」をしますよね。IDとPWを入力して、ログインをする。そうやって初めてそのページが見れるようになる。

 

でも待ってください。

もしログイン後のページのURLを予め控えておくと、どうなるのでしょうか?

 

HTTPのリクエストはそれぞれが独立しています。だからログインの処理とログイン完了後のページを表示する処理も別々です。つまり、シンプルにWebページを作ってしまうと、そのURLを入力しさえすれば、ログインせずともそのページを表示できてしまうのです。

 

そこで役に立つのがCookieです。

 

Cookieとは、Webサーバ側から渡される証のようなものです。

 

プログラムを書けば、WebサーバからWebブラウザに対してHTTPレスポンスのヘッダを利用して小さな情報を送ることができます。

 

それ以降、同じWebサーバにHTTPリクエストを送る際にはそのWebブラウザは以前受け取ったCookieも一緒にWebサーバに送るのです。そうすれば、Webアプリケーション側はリクエストを送った相手がどんな相手なのかを知ることができます。

 

このCookieを利用する仕組みがあれば、ログインをちゃんとしないでCookieをWebサーバから受け取っていない、URLを直接入力する輩はそのページにアクセスすることを防ぐことができます。

 

嗚呼、便利。

 

 

セッションID

 

しかし、このCookie、HTTP通信を通してやりとりしていますから、少し調べればその中身がバレてしまうそうな。Webアプリケーションを開発する側がCookieをWebクライアントのログインパスワードやユーザー名とそのまま同じものに設定してしまうと、セキュリティの観点ではOUTなのは容易に想像がつきますね。

 

そこで利用されるのがセッションIDというものです。

 

セッションIDとは、銀行で色々な手続きをする際に貰う受付番号のようなものです。

 

銀行の窓口の方は私の名前や口座番号などの個人情報はわかっていますが、私を呼ぶときに名前で呼ぶことはありませんし、ましてや口座番号などで呼びません。ただ受付番号で呼びます。このシステムでセキュリティが守られているのです。

 

セッションIDを渡すプログラムをWebアプリケーション側でつくっておけば、WebブラウザがCookieを受け取る際にセッションIDも一緒に受け取ります。そして、我々クライアント側から見れるのはセッションIDのみ。これで大丈夫ですね。

 

あとがき

 

ちょうど簡単なログイン処理機能を作ってみたら、Cookieを利用することはできました。でもセッションIDを設定しようとしたらなんかうまくいかなかった・・・。

 

この本に付録されているサンプルコードのままやったのにな・・・。

 

 

それでは今回はここまで。

 

(30min)

 

 

【追記】

コーチのさぼさんから頂いた知識をここで追記として残しておきます。

 

Cookieの中にセッションIDを入れますがそれも簡単にディベロッパーツールやWebインスペクタのコンソールの部分で見えてしまい、セキュリティとしては完全じゃないそうです。

 

なので個人情報に関しては基本的にHTTPSで暗号化し通信をするのがMustだとのこと。

 

さらに、それでもずっと分析され続けたらいつかは解読されてしまうため、セッションIDには有効期限をつけるのが一般的のこと。

 

今度さぼさんにあったら知識の確認として色々聞こうっと。