Cookie
Cookieはブラウザがパソコンのハードディスクに保存する小さなデータであり、簡易なテキストファイルのこと。 サーバー(Rails)がクライアントに一時的に情報を記録させるときに使用する
Overview
- クッキーとは、変数名とその値のペアのデータのこと
- クッキーはサーバー側で設定して、ブラウザにレスポンスとして送る
- 受け取ったクッキーはブラウザに保存される
- ブラウザが再度そのサイトにアクセスする際、保存されているクッキーをサーバーに送る
- ブラウザ側でクッキーに変数を追加したり、既存の変数の値を変更することもできる
- クッキーには有効期限を設定できる
- クッキーの有効範囲を、ドメインやパスで絞ることができる
- クッキーの有効範囲を、ドメインやパスで絞った場合、そのクッキーを他のドメインやパスのサーバーから見ることはできない
Cookieの種類
クッキーには2種類ある
Cookieには1st party Cookieと3rd party Cookieがある。
その違いはCookieの発行元になる。
- セッションクッキー(sessionと共に利用する)
セッションクッキーは、Webサイトにアクセスしている間、ブラウザに一時的に作成され、ユーザーがサイトを離れると、セッションクッキーは削除される。
Expires
やMax-Age
ディレクティブが指定されていないクッキー。クライアントが終了したときに削除される。 - 永続クッキー
永続クッキーはユーザーがブラウザを閉じても削除されず、そのクッキーを作成したWebサイトにアクセスすると再度アクティブになります。永続クッキーは、Cookieのファイル内で設定された期間ブラウザに残る。
Expires
やMax-Age
ディレクティブが指定されたクッキー。クライアントが終了しても削除されない。
1st party Cookie
実際に訪れているサイトのドメインが発行しているのが1st party Cookie
1st party Cookieはユーザーにブロックされにくいという特徴。
そのため、3rd party Cookieに比べてユーザーをきちんとトラッキングすることが可能。
しかし、一方でそのドメインからしか発行できないため、サイトを横断したCookieの付与はできません。
3rd party Cookie
訪れているサイト以外のドメインから発行されているのが3rd party Cookie
たとえば、訪れたサイトにバナー広告が埋まっている場合、そのバナー広告はアドサーバーから配信されています。アドサーバーは訪れているサイトのドメインとは異なるドメインを持っているため、そのCookieは3rd party Cookieになる。
3rd party Cookieはサイトを横断したCookieの付与ができます。そのため、そのユーザーがどのサイトを訪れているかという情報を把握できる。
しかし、近年3rd party Cookieはブラウザによるブロック等の影響で有効期限がすぐに切れてしまうという問題
Cookieの保存期間
これまで Chrome の Cookie の有効期限に制限はありませんでした。1日でも、1か月でも、10年でも Cookie を発行する側の任意で決めることができました。 しかし、2022年8月にリリースされた Chrome 104 以降、Cookie の有効期限は400日を上限とする仕様に変更されました。 Cookie を発行する側が有効期限2年の Cookie を発行しようとしたとしても、ブラウザ側で自動的に400日に短縮されて保存されます
Cookieを保存してはいけない国
とくにEU圏ではこのことが問題視され、GDPRという、Cookieを個人情報として取り扱い、勝手に取得してはいけないという法律まで制定されている。
はい、発行されたクッキーは、そのクッキーが設定されたドメインおよびパスに対してのみ有効です。他のドメインやサイトでは、そのクッキーは送信されません。
クッキーのスコープ
クッキーのスコープは、以下の要素によって決定されます
- ドメイン
クッキーは、設定されたドメインに対してのみ送信される。
たとえば、
example.com
で設定されたクッキーはexample.com
およびそのサブドメイン(sub.example.com
)に対してのみ有効。 他のドメイン(another-example.com
)には送信されません。 - パス
クッキーは、設定されたパスに対してのみ送信される。
/path
で設定されたクッキーはexample.com/path
でのみ有効。 デフォルトでは、ルートパス (/
) が設定され、ドメイン内のすべてのパスに対して有効になります。
タブやサイトの変更
- 同じタブ内でサイトを変更した場合
ブラウザのアドレスバーを使って異なるサイトに移動すると、新しいサイトに対してクッキーは送信されません。クッキーはそれぞれのドメインに対してスコープが設定されているため、異なるドメインに対しては無効です。
ユーザーが
example.com
からanother-example.com
に移動すると、example.com
のクッキーはanother-example.com
には送信されません。 - 異なるタブやウィンドウで同じサイトにアクセスした場合
同じドメインに対して設定されたクッキーは、異なるタブやウィンドウでも有効。
ユーザーが
example.com
を2つの異なるタブで開いた場合、両方のタブで同じクッキーが送信されます。
- クッキーのスコープ: クッキーは設定されたドメインおよびパスに対してのみ有効です。他のドメインやパスには送信されません。
- 同じタブ内でサイトを変更した場合: 異なるサイトに移動すると、新しいサイトには前のサイトのクッキーは送信されません。
- 異なるタブやウィンドウで同じサイトにアクセスした場合: 同じドメインに対して設定されたクッキーは、異なるタブやウィンドウでも有効です。