LoginSignup
5
6

More than 1 year has passed since last update.

1秒も保持できないCookieを永久的に保持する方法(ITP2.3対応)

Posted at

概要

半永久的に保持してくれるCookieを作成しようとした時に、困ったことが起きた。
普通にCookieをセットしても、Safariだと1秒も保持せずにexpireされるという悲しき事態になっている。
原因は、Appleが発表したITP(Intelligent Tracking Prevention)というトラッキング防止機能のアップデートによるものだ。
現在、制限は厳しいのはSafariだけだが、他のブラウザでも近い将来同じ状況になる可能性が高いため、今のうちに対策をうっておく必要がある。
以下は、その対策である。

対策

① ❌3rd Party Cookie  ◎1st Party Cookie

3rd Party Cookie の場合、即expireされる。
これに関しては、SafariだけでなくChrome(条件あり)とFirefoxでも即時消される。

したがって、1st Party Cookieで発行させる必要がある。
1st Party Cookieとは、cookieを発行するサーバーとcookieを埋め込まれるサーバーが同じである状態のcookieのことを指す。つまり、同じドメインである状態であるということだ。
逆にドメインが別の場合に発行されるcookieは、3rd Party Cookie と定義される。
Screen Shot 2021-10-15 at 13.43.23.png

② ❌jsからの発行  ◎サーバーサイドからの発行

①の対策を行うために、javascriptでcookieを発行する方法がある。
GTM(Google Tag Manager)や GA(Google Analytics)などはこの手法が使われる。
Screen Shot 2021-10-15 at 16.50.20.png
しかし、Safariだと1日もしくは7日間でexpireされる。
今回は半永久的に保持したいので、要件を満たすことができない。
そこで使用される方法は、サーバーサイドからCookieを発行する方法だ。
HTTPヘッダーには、Set-Cookieというサーバーサイド側からcookieを発行する手段がある。
サーバーサイド側からの発行の場合だと、ITPの制限はなく開発者側で自由に設定できる。
また、1st Party Cookieと定義されるためにSet-Cookieするサーバーが同ドメインにある必要がある。
2つのサーバーを同ドメインと判断させる方法は、サブドメイン化することだ。
もしブラウザを表示するドメインがcontents.comならば、www2.contents.comのようにレコード設定することで可能になる。
Screen Shot 2021-10-15 at 16.51.41.png

③ ❌CNAMEレコード  ◎Aレコード

②でサブドメイン化する時のレコード設定の方法として、CNAMEレコードとAレコードがあげられる。
それぞれのレコードの意味を簡単に説明すると、

  • CANAMEレコード:正規ホスト名に対する別名を定義するレコード
  • Aレコード:IPv4でホスト名とIPアドレスの関連づけを定義するレコード

しかし、CNAMEレコードで設定すると、Safariでは7日間しかcookieを保持できない。
したがって、Aレコードを使ってサブドメイン化をする必要がある。

まとめ

ITP2.3までによると、以下を守るとcookieは開発者側で自由に設定できるため、結果的に半永久的の保持が可能である。

  • 1st Party Cookie で定義されるように発行すること
  • サーバーサイド側からcookieを発行すること
  • Aレコードでサブドメイン化すること
5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6