Cookie(クッキー)とセッション
プロになるためのWeb技術入門を読んでいて、Cookieやセッションを忘れていました。
Cookieの解説がわかりやすかったのでメモします。
Cookie
Cookieとは
HTTP通信は「Stateeless Protcol(ステートレスプロトコル)」つまり、状態を持たないプロトコル。
そのため、ログイン状態などの状態をもてないため、HTTP通信をするとき、毎回ログイン画面が本来なら表示される。
これを解決するため、ブラウザを識別するための情報をHTTP通信に含めて送信する。
これをCookieと呼ぶ。
実際のやりとり
Cookieは、WebサーバからWebブラウザへHTTPレスポンス(リクエスト)のヘッダを利用して小さな情報を送ります。この情報は「名前=値」の組み合わせで表される。
①Webブラウザが最初の通信
②Webサーバは「Set-Cookie」ヘッダーにCookieを含めてWebブラウザへ送信
③Webブラウザは「Cookie」ヘッダーに送信されたCookieを含めてWebサーバへ送信
その後はログアウト、ブラウザを閉じる、タイムアウトしない限り、Cookieを含めて送信する。
ログアウトなどすると再度ログインをして新たにCookieを発行する。
- HTTPレスポンス
HTTP/1.1 200 OK ・ ・ Set-Cookie : user=name; pass=password..... ・ ・
- HTTPリクエスト
HTTP/1.1 200 OK ・ ・ Cookie : user=name; pass=password ・ ・
Cookieの問題点
Cookieにはセキュリティ上の問題がある。
HTTP通信の中身は見ようと思えば見える。
つまり、Cookieで保存されたユーザ名やパスワードは簡単に他人にのぞかれる危険性があるので、なりすましの危険性がある。
セッション
セッションとは
上記の問題も含め、考え出されたのが「セッション」。
セッションとは、ネットショッピングで例えると、
「ログイン」、「カートに入れる」、「購入」、「ログアウト」といった一連の流れを「セッション」という。
セッションIDとは
上記の通信の場合、Cookieにユーザ名やパスワードなどを用いて通信するのはよろしくない。
そのため、代わりに「セッションID」という「32桁の16進数のランダムな文字列」が使用される。
セッションIDはユーザの情報そのものを入れないので安全性は高い(セッションIDが漏洩すると結局はなりすましされるのでセキュリティ対策が必須!)。
セッション状態はWebサーバ側で管理されている。
ちなみに、有効期限が決められていないCookieはWebブラウザが閉じられると同時に削除される。
このようなCookieを「セッションCookie」という。