今日の日報

今日の日報です

セッションとクッキーの違いって意外と理解していない

どうも、僕です。もうすぐバレンタインデーですね。クッキーとかセッションとか、本当によくわかっていません。サービス運営者、開発者でもなかったので、意識したことない&面倒そうなので敬遠していたのですが、今更、セッションとクッキーについて調べてみました。

cookieとは

Cookieとは、Webサイトの提供者が、Webブラウザを通じて訪問者のコンピュータに一時的にデータを書き込んで保存させる仕組み。
Cookieとは|HTTP Cookie|クッキー − 意味 / 定義 / 解説 / 説明 : IT用語辞典

ものすごく雑にいうと、サイトを見たときに、ブラウザ側に保存されるテキストデータ(っぽいもの)。
一旦セットされたクッキーは、再度読み込まれたりする。基本はホスト単位(www.example.comとか)で制御されるが、ドメイン指定も可。1つのページに1つのcookie、ではない。自分の環境で「 https://www.google.co.jp/ 」を開くと、cookieが複数セットされました。あとは、日本語もエンコード/デコードすれば使えるようです。

実際のクッキーは、ブラウザに格納されているので、見ようと思えばみられます。

Chrome で Cookie の消去、有効化、管理を行う - パソコン - Chrome ヘルプ

余談・アドテクへの展開

クッキーは、はやりのアドテクでも利用されています。例えば、ユーザーのトラッキングや、データの名寄せなど。

www.optimizer.co.jp

sessionとは

特に、Webの分野ではアクセス数の単位の一つで、Webサイトを訪れたユーザがサイト内で行う一連の行動をまとめて1セッションという。
セッションとは|session − 意味 / 定義 / 解説 / 説明 : IT用語辞典

実際に、なにかあるわけではなく、「概念」。

ということで、実際の動きを確認。

 プレーンな通信

cookieを受け取っていない、一番最初の通信。 amazonでの事例。

最初に、アマゾンにリクエストを送ってみました。すると、レスポンスが返ってきます(ページが表示された状態)

  • responce

    HTTP/1.1 200 OK
    Date: hogehoge, hogehoge hogehoge 2016 00:00:00 GMT
    Server: Server
    Set-Cookie: skin=noskin; path=/; domain=.amazon.co.jp
    pragma: no-cache
    x-amz-id-1: hogehoge
    cache-control: no-cache
    x-frame-options: SAMEORIGIN
    expires: -1
    Vary: Accept-Encoding,User-Agent,Avail-Dictionary
    Content-Type: text/html; charset=UTF-8
    Set-cookie: x-wl-uid=hogehoge; path=/; domain=.amazon.co.jp; expires=hogehoge, hogehoge-hogehoge-hogehogehogehoge 00:00:00 GMT
    Set-cookie: session-id-time=hogehoge; path=/; domain=.amazon.co.jp; expires=hogehoge, hogehoge-hogehoge-hogehogehogehoge 00:00:00 GMT
    Set-cookie: session-id=hogehoge; path=/; domain=.amazon.co.jp; expires=hogehoge, hogehoge-hogehoge-hogehogehogehoge 00:00:00 GMT
    Content-Length: hogehoge

「Set-cookie」で、cookieのデータを渡されています。その中に「session-id」の文字が!


cookie受け取り後の通信

続いて2回目のアクセス。

  • request

    GET http://www.amazon.co.jp/ HTTP/1.1
    Host: www.amazon.co.jp
    Connection: keep-alive
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36
    Accept-Encoding: gzip, deflate, sdch
    Accept-Language: ja,en-US;q=0.8,en;q=0.6
    Cookie: skin=noskin; x-wl-uid=hogehoge; session-token=hogehoge; ubid-acbjp=hogehoge; session-id-time=hogehoge; session-id=hogehoge; csm-hit=hogehoge

こちらから、先ほど受け取った情報を送信しています。その中に、「session-id」も含まれています。

  • responce

    HTTP/1.1 200 OK
    Date: hogehoge, hogehoge hogehoge 2016 00:00:00 GMT
    Server: Server
    Set-Cookie: skin=noskin; path=/; domain=.amazon.co.jp
    pragma: no-cache
    x-amz-id-1: hogehoge
    cache-control: no-cache
    x-frame-options: SAMEORIGIN
    expires: -1
    Vary: Accept-Encoding,User-Agent,Avail-Dictionary
    Content-Type: text/html; charset=UTF-8
    Set-cookie: ubid-acbjp=hogehoge; path=/; domain=.amazon.co.jp; expires=hogehoge, hogehoge-hogehoge-hogehogehogehoge 00:00:00 GMT
    Set-cookie: session-id-time=hogehoge; path=/; domain=.amazon.co.jp; expires=hogehoge, hogehoge-hogehoge-hogehogehogehoge 00:00:00 GMT
    Set-cookie: session-id=hogehoge; path=/; domain=.amazon.co.jp; expires=hogehoge, hogehoge-hogehoge-hogehogehogehoge 00:00:00 GMT
    Content-Length: hogehoge

セットされたcookieの中にもまた「session-id」が。

このように、「session-id」がやりとりされcookieに保存され、再度取り出されて、一連の通信が同一のセッションであることがわかるんですね。

参考・サイト運用時に考えないといけないセキュリティまわり

セキュリティリスクも考えないとなんですね。

Rails セキュリティガイド | Rails ガイド

セッションに関するセキュリティリスクについて勉強してみた! - 酒と泪とRubyとRailsと

次回の課題

header情報って面白いなと思いながら、「Brotli」について調べてみたいとおもいます。