Cookieってよく聞くけど、あれは一体何者なの？

# はじめに

Adventカレンダー「エンジニアのためのWebマーケティング」の5日目です。
サクッと読める記事を目標に。異論・ツッコミ大歓迎。
できるだけ専門用語を使わないように気をつけます。

それでは参りましょう

# Cookieについて

今日のテーマはCookieについてです。
![StockSnap_YKUQOTPBGA.jpg](https://qiita-image-store.s3.amazonaws.com/0/72413/780a6148-0436-782d-c1ab-4f00622a4433.jpeg)


## Cookieって何？

**お菓子です**

違います。


真面目に述べると・・・

* ブラウザに保存される情報のこと
* ユーザー管理やセッション管理に用いられる
* クライアントの通信履歴を 取るために作られた

## はじめはなかった

インターネット黎明期 Cookieという機能は存在しませんでした

何故なら、HTTPは本来同一URLならば 同一の内容を提供しないといけなかったからです。
今で言う、履歴やログインの機能を使う概念がそもそも無かったのです。

## 懸念が発生

しかし、インターネットの普及につれて、ニーズが生まれてきます。

**「同一URLでは、同一の内容を表示していないといけない」**
というルールを遵守し続けると、例えば商品の購入完了ページをリロードし続けたりした場合に、
同じ商品の購入を**読み込まれた回数連続で**してしまうという現象が発生してしまいます。

そうなると、購入した人間は困りますし、
そもそもURLが共有されると購入されるというのはセキュリティ的にどうなの？？
安全性は担保できないの？

という懸念が発生します。

# 閑話休題 -当時流行していたブラウザ-

ちなみにそんな世の中のときに流行していたブラウザ
みなさんをちょっとだけノスタルジックな気分へ誘います。

個人的には、`marquee`タグが懐かしいですね。

## Internet Explorer 5

![ie5.gif](https://qiita-image-store.s3.amazonaws.com/0/72413/0da747fa-a021-d4a8-1510-552188b91375.gif)
（画像出典：[INTERNET Watch]
(https://internet.watch.impress.co.jp/www/article/980612/ie5.htm)）

IEが懐かしいけども、そもそも昔のWindowsが懐かしい・・・。

##  Netscape Communicator 4
![netscape473.gif](https://qiita-image-store.s3.amazonaws.com/0/72413/8f50ee53-9bcf-c56e-209d-6d979975e292.gif)
（画像出典：[窓の杜]
(https://forest.watch.impress.co.jp/article/2000/05/29/netscape473.html)）

懐かしい・・・
IEはお気に入りというのに対し、Netscapeはブックマークという言語が揃ってない感がいいですね。

**はい、懐古タイムはここまで。**

# 偉い人は考えた

話をもとに戻します。

そんな懸念が発生していた世の中で、Netscape Communications Corporation社（後のMozilla Foundation）がCookieという技術を提案します。

**「ブラウザに整理券配布できるように すればいいんじゃない？」**
**「そうすれば、ユーザーを判定できてサイトの内容をユーザーに合わせて変えられるのでは！？」**
**「じゃあもう、それ実装するっきゃない！」**

そんなイメージで彼らがまとめた仕様は以下です

> 1. ウェブサーバがウェブブラウザにその状態を区別する識別子をHTTPヘッダに含める形で渡す。
> 1. ブラウザは次にそのサーバと通信する際に、与えられた識別子をHTTPヘッダに含めて送信する。
> 1. サーバはその識別子を元にコンテンツの内容をユーザに合わせてカスタマイズし、ブラウザに渡す。必要があれば新たな識別子もHTTPヘッダに含める。
> 
> 以降2、3の繰り返し。

（出典：[Wikipedia](https://ja.wikipedia.org/wiki/HTTP_cookie)）

### 簡単にまとめると以下の感じ

<img width="1260" alt="スクリーンショット 2018-12-04 22.07.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/72413/b58fed14-d4fe-e833-7d04-8973aa3674cf.png">

# Cookieの特性

Cookieの特性として、以下のようなものが挙げられます

## ブラウザ側は自由にCookieを操作できる

人が手動で値を変更できますし、Javascriptで操作も可能です。

* ブラウザ・ドメインごとにCookieは異なる 
    * そもそもの思想が**サイトを区別するため**であるから
* サブドメイン間では同一Cookieを 使用することができる
    * 以下のドメインでは共通のCookieが使用できます
    * www.example.com
    * abc.example.com
    * def.example.com
    * foo.example.com

## 揮発性がある


### いつ消されてもおかしくない

Cookieはユーザー側でいつでも消そうと思えば消せます。
そして、そもそもの仕様として「有効期限が**必ず**設定」されています。

#### ちなみに・・・
その有効期限を**2038年以降を指定すると不具合が発生**します。
原因はこちら → [2038年問題](https://ja.wikipedia.org/wiki/2038%E5%B9%B4%E5%95%8F%E9%A1%8C)

さっきの話をもとにすると、
Cookieを消してしまえば、つまり**「整理券をなくせば、また取り直す所から」**になります。

つまり、これは言い換えると**本当の意味でのWebサイトへの初回アクセスは判断できない**ということになります。

## 潜む脆弱性

Cookieにはリスクもあります。

### なりすましをすることができる

Cookieのが持ってる値を何らかの形で奪われてしまうと、他人のブラウザになりすますことができます。
例えば、Facebookのクッキーデータが奪われてしまった場合、自分の個人情報が筒抜けになってしまいますし、見に覚えのない投稿をされてしまうような可能性もあります。

オレオレ詐欺じゃないですが、ネット上でCookieの値を聞かれても、絶対に情報を公開しないでください。

### Cookieを除外するオプションは実は危険

ブラウザは、Cookieを受け入れるオプションを切ることが出来ます。
その場合でも、URLにセッションの情報を付与することで、Cookieが有効かのように振る舞うことが出来ます。が、この場合URLに情報が載っているので[パケットキャプチャソフト](https://knowledge.sakura.ad.jp/6286/)などを使うことによって、簡単に覗かれてしまいます。

Cookieもリスクがありますが、Cookieを使わないのはもっと危険です


# 広告にも応用されている

上記の特徴があるCookieですが、広告の技術にも使われています。
以下のような特性が、広告の分析に役立っています

* 履歴が取れる
* ユーザーごとに異なる

[前日に書いた記事](https://qiita.com/ssaita/items/2e81d9790513da0069a7)でも。Cookieはユーザーの判定に使われています。今やユーザーの判別には欠かせない要素になっています。

しかし、先程述べたように**本当の意味でのユーザーではない**ので、どれだけ精度を高くユーザーを推定するか、はWeb広告業者や広告効果測定業者の腕の見せ所となっています。


# 他のCookieに纏わる話

Cookieといえば、以下の話が最近話題になっています。

* 1st Partyと3rd Party
* ITP
* GDPR

これらの話はまた別の日のAdvent Calendarで解説します。

# おさらい

今日の記事のまとめです。

* Cookieはブラウザごとの整理券のようなもの
* ブラウザ・ドメインごとに区切られる
* 揮発性が高く、容易に消すことも可能
* 非常に便利な側面もあるが、セキュリティのリスクは孕んでいる
* 広告の技術にも応用されている

# どうでもいい話

ちなみに、`Cookie`という名前の由来ですが、考案者のルー・モントゥリ氏は以下のように述べています。

> I had heard the term "magic cookie" from an operating systems course from college. The term has a somewhat similar meaning to the way Web Cookies worked and I liked the term "cookies" for aesthetic reasons. Cookies was the first thing I came up with and the name stuck.

早い話が、Cookieという言葉が気に入っていたようです。


# おわりに

明日は「なぜ広告を分析する必要があるのか」について書きます。