第一方Cookie在WebKit浏览器中的生存期是?
马老师在2019年介绍ITP2.1时曾提及在苹果系浏览器和iOS平台上所有用WebKit的浏览器中,用JavaScript写入的Cookie的生存期最长只有7天。因此各环境下Cookie的生存状态如下表所示。
什么是WebKit?WebKit 是 Apple 开发的开源浏览器引擎。Safari、Apple Mail、App Store 等都是使用该技术的流行应用程序。此外,iOS、macOS、iPadOS、tvOS 和一些 Linux 程序上的许多其他原生程序都在使用 WebKit。另一方面,Chromium 是谷歌的一个开源项目。目前,这是最流行的浏览器引擎,为 Google Chrome、Microsoft Edge、Opera 和许多其他现代网络浏览器提供支持。
Chromium 基于 Blink 引擎,而 Blink 引擎又基于 WebKit。从这个意义上说,Chromium 是 WebKit 的修改和改进版本。因此,从技术上讲,大多数现代网络浏览器都间接由 WebKit 提供支持。
不久前Simo Ahava发现苹果偷偷去掉了这个7天的限制,你可以自由设定JavaScript写入的Cookie的过期时间。
先别高兴太早,实际上这里讨论的由JavaScript设置的第一方Cookie被管制在了Script-Writeable Storage中:
这里我们必须注意的是7 days of no user interaction with the website。这个7天是指没有和网站互动的七天。倘若这七天中没有打开浏览器,那么这里的数据并不会清空。7天中的每一天都是使用了浏览器但是没有和网站互动的。
举个常见的例子,当我们周五和网站互动后,JavaScript写的Cookie被写到了Script-Writeable Storage中,这样有7天生命——HP=7。周末的两天我们并未开机,那么周一打开浏览器会发现HP-1,而不是HP-3。当我们周一再次和网站互动后HP又恢复到7。有一天算一天,当我们连着7天开浏览器却未同网站互动,那么被JavaScript写入的第一方Cookie就会被清空。
我们啰啰嗦嗦说了这些是希望大家对定义有准确的认识。这样JavaScript写的Cookie实际的最长寿命最短是7天。注意:当你将网页作为iframe中元素并使用Storage Access API进行交互依然算作正常交互,此时可以重置生命期使HP=7。
讲到这里,极诣的忠实读者可能记得我们在2019年还介绍了ITP2.2。在下面情况下Cookie只有24小时生命期:
- 跨站访问时,源网站域名被ITP机器学习识别为具有跨站跟踪能力的域名。
- URL修饰,即URL后带跟踪参数(用?或者#传递),该跟踪参数会标识访客身份。
这里要强调的是,ITP2.2中限制的这些场景在当今依旧有效,它们并不因此获得了超过24小时而长达7天的生命期。顺便提一下哪些域名会被识别为具有跨站跟踪能力?当然是那些广告卖得比苹果好的网络啦!
对用户来说,7天的JavaScript的Cookie生命周期无疑会造成一些不便,这就还是提醒我们了——能使用HTTP来set-coookie尽量使用HTTP的方法。对于网站跟踪需求还是要在有技术能力条件的基础上使用服务器端模式。咱们暂时先说这些。