http和https下的cookie共享

Wed 23 April 2014
By dqw

起因

一天客户提出一个需求,站点的登陆和注销使用https,其它功能还是使用http协议。由于身份认证使用的是SESSION,而识别SESSION需要依靠Cookie中的SESSIONID。其实最根本的问题就是http和https下的Cookie是否可以共享。那么https协议下写入Cookie的SESSIONID,在跳转到http协议后能够正常读取吗?第一反应是不行,因为浏览器有同源策略,那实际情况又是怎么样的呢?

实际情况

  1. 经过测试,当混用http和https时,firefox、chrome、ie8都可以正常读取Cookie
  2. https协议下,浏览器默认不会加载页面中的http请求(图片会正常加载,js和css不加载)。可以不写明具体的协议只写两个斜杠,即用//代替http://和https://,这样浏览器加载的时候会自动匹配当前页面的协议。这也是Google HTML/CSS Style Guide推荐的方式。

总结

  1. Cookie的安全策略和Javascript的同源策略并不完全相同,Cookie只受Domian、Path、Expires、HttpOnly、Secure等属性的影响。
  2. Cookie的传输并不受端口限制。
  3. 当Cookie属性secure设置为true时,Cookie只能在https中传输,http不会传输。

参考

  1. Are HTTP cookies port specific?
  2. RFC2965
  3. RFC6265