第一方Cookie和第三方Cookie

------ 记一次cookie问题查找经过

一、问题概要
有个页面,其登录功能是用jquery的jsonp跨域调用的,调用的url是http://hd.xx.yyy.com/../xxServlet,第一次登录成功后会将一部分信息写入cookie,
以实现下次自动登录。
cookie的设置如下:
cookie.setPath("/");
cookie.setDomain(".yyy.com");
cookie.setMaxAge(20 * 60);

二、问题现象
1、在各个浏览器中测试登录没有问题;
2、页面放到本地打开(C:\Users\Administrator\Desktop\Christmas\index.html),登录后再刷新时,在chrome,ff里可以自动登录,但IE(我用的11)不行;
3、放到服务器上(http://xx.yyy.com/../index.html),自动登录都正常。

三、调试经过
1、该页面在本地用IE打开,按f12调出调试工具,登录,查看服务器响应的Cookies信息,如下:

红色标记的即为设置自动登录的cookie,可以看到服务器已经发送了该cookie。现在刷新页面,发现不能自动登录,查看请求信息:
可以发现设置的那个cookie并没有随请求信息一起发送给服务器,查看本地存储的cookie信息:

打开这些cookie文件查看内容,发现只有上面标红的文件中有kztraceuid信息,并没有自动登录的cookie:

上面的信息说明,服务器虽然发送了key这个cookie,但IE并没有保存,而是丢弃了。
IE为什么要丢弃呢?这时想到,cookie会涉及安全问题,难道是出于安全方面的原因而阻止了这个cookie?!再来试试。

2、IE中选择“工具”-->Internet选项-->隐私:


IE的默认隐私级别是中,把级别调到低级试试:


设置后重启IE,登录后再刷新,发现可以自动登录了,查看请求信息如下:

比较一下隐私级别的“中“和”低“,发现中级别多了一项”阻止没有经你明确同意就保存你的联系信息的第三方Cookies“,由此可知,我设置的key这个cookie就属于这个类别,而chrome和ff默认是接受第三方cookies的,这就解释了为什么IE不能自动登录的问题。
第一次看到第三方cookie,那什么又是第三方cookie呢?

三、第一方cookie和第三方cookie
(下面这段来自:http://linux.cn/thread/4124/1/1/)
第一方Cookie和第三方Cookie,都是网站在客户端上存放的一小块数据。他们都由某个域存放,只能被这个域访问。他们的区别其实并不是技术 上的区别,而是使用方式上的区别。比如,访问www.a.com这个网站,这个网站设置了一个Cookie,这个Cookie也只能被www.a.com 这个域下的网页读取,这就是第一方Cookie。如果还是访问www.a.com这个网站,网页里有用到www.b.com网站的一张图片,浏览器在 www.b.com请求图片的时候,www.b.com设置了一个Cookie,那这个Cookie只能被www.b.com这个域访问,反而不能被 www.a.com这个域访问,因为对我们来说,我们实际是在访问www.a.com这个网站被设置了一个www.b.com这个域下的Cookie,所 以叫第三方Cookie。
  • 第一方Cookie接受率高,更准确,没有特殊需要就用他。 
  • 第三方Cookie可以跨域跟踪,特别需求可以应用。 


由于页面是在本地直接打开的,其路径是:
C:\Users\Administrator\Desktop\Christmas\index.html
而设置cookie的域为:
http://hd.xx.yyy.com/../xxServlet
明显不属于同一个域,从上面可知,这种情况下,key这个cookie是属于第三方cookie。
放到服务器上就可以自动登录的问题现在看来则很显然:
从服务器上访问这个页面(ttp://xx.yyy.com/../index.html)
由于cookie的domain设置为:.yyy.com,在同一个域,这时属于第一方cookie,所以IE没有拦截。


参考:
http://linux.cn/thread/4124/1/1/

你可能感兴趣的:(web)