iOS 7下Safari的Cookie机制

今天在测试手机Safari,发现Safari下的第三方Cookie机制挺有意思,笔记一下。

测试平台

  • iPhone5
  • iOS 7
  • Safari
  • Cookie为默认设置(阻止来自第三方和广告商的Cookie)

测试结果

  • 只要在Safari访问过的域名,在往后任意的访问中(不删除Cookie及访问数据),该域名都将被作为第一方域名处理

案例

  1. 用户在媒体网站看到并点击广告;
  2. 访问广告系统A.COM后,跳转到网站着陆页B.COM;
  3. 用户在网站B.COM进行了转化行为;
  4. 转化行为数据发送到A.COM。

按照传统的第一方Cookie概念,A.COM在用户浏览B.COM时候是属于第三方域名,写在A.COM域名下的Cookie不会被附带在发送至A.COM的请求中。但此处移动Safari会将A.COM域名下的Cookie附加在对应请求中。

在后续,我又对Safari进行了中断Session(置于后台数十分钟),关闭浏览页面,关闭Safari软件等操作,都未能对上述规则产生影响,因此得以结论。

==========更新==========

此后,又测试了Android平台下的浏览器。以Meizu MX3为例:

  • 默认浏览器:第三方Cookie均不发送;
  • Android Chrome:机制与iOS下的Safari一样。

UC浏览器由于存在云端缓存等机制,导致我测试了好几次都未成功。但总体来说,现在的第三方Cookie已经越来越不靠谱是毋庸置疑的。

网站分析的Cookie

Cookie,也称之为HTTP Cookie、Web Cookie或者浏览器Cookie,是一小段由网站生成的并被存储在用户浏览器的数据,它随着用户访问网站而产生。当用户在以后再次浏览相同的网站,这小段包含用户之前信息的数据将被发送回网站。

Cookie的种类

  • Session Cookie:一个用户的Session Cookie(也称之为内存Cookie或瞬息Cookie)是当用户浏览网站时候,网站暂存的Cookie。当不在该Cookie的过期日期或者有效间隔内,访问网站Session Cookie将被创建,当用户关闭浏览器的时候,Session Cookie将被删除。
  • 第一方Cookie:第一方Cookie是由受访网站相同域名(或其子域名)创建的。
  • 第三方Cookie:第三方Cookie是由不同于受访网站域名创建的。

Cookie的构成

  1. Cookie名字(Name);
  2. Cookie的值(Value);
  3. Cookie的过期时间(Expires / Max-Age);
  4. Cookie作用路径(Path);
  5. Cookie所在域名(Domain);
  6. 使用Cookie进行安全连接(Secure)。

前两个参数是Cookie应用的必要条件,另外,还包括Cookie大小(Size,不同浏览器对Cookie个数及大小限制是有差异的)。

Cookie的用途

  • Session管理  
  • 个性化识别
  • 跟踪与监测

前两者就不多说了,关于Cookie应用于跟踪与监测。虽然跟踪也可以使用用户IP之类,但是Cookie会更准确一些:

  1. 如果用户请求一个站点的页面,但是这个请求不包含Cookie,服务端将认为是第一个访问的页面,并为其创建一个随机字符串并且和页面内容一同发送给浏览器(客户端);
  2. 从这之后,Cookie将自动的随着每次的页面请求一同发向服务器,而服务器也将在日志中记录下来这些请求Cookie、请求页面的URL、请求日期时间。

Cookie的实现

cookie1

浏览器向客户端请求index.html网址;

cookie2

服务器响应到请求信息,为该浏览器创建Cookie,名为name的Cookie为value;名为name2的Cookie为value2,并且其过期时间为2021年。同时返回页面内容给浏览器;

cookie3

当浏览器再次向服务端请求一个页面,将附上Cookie信息,其中包含name的Cookie的值为value,name2的Cookie的值为value2,这个时候服务端就可以根据这个Cookie对应到之前的行为和特征了。

第一方Cookie和第三方Cookie?

首先,Cookie安全机制决定Cookie信息只在相同域名中读写。对于一个网站而言,就存在第一方Cookie与第三方Cookie了,第一方Cookie即和网站同域名下生成的Cookie,而第三方Cookie则是一个第三方域名创建的Cookie,因此两者不能相互读写。

而各个浏览器的安全级别设置的不一样,也会不同程度的接受或者拒绝Cookie。在过往的调查中显示,拒绝第三方Cookie的用户比拒绝第一方Cookie的用户多不少,因此也就没法进行识别统计了(当然,绝大多数用户还是会接受第一方Cookie的)。

Google Analytics(Universal Analytics)中的Cookie

在新版的UA中,Cookie已经由之前的多个变为一个了。Cookie Name叫_ga,形如:

_ga=1.2.17184633.1172761150.1374069301

这个Cookie仅记录了用户的唯一ID信息(Client ID,cid)。创建Cookie的域名为网站域名(第一方Cookie),有效期为2年。我们可以通过Chrome的开发者工具中Resources中的Cookies来查看到该Cookie信息。设置Google Analytics(Universal Analytics)便捷跨域的时候,该Cookie信息也会被写在目标网址的_ga参数中。

参考资料: