起因
一天客户提出一个需求,站点的登陆和注销使用https,其它功能还是使用http协议。由于身份认证使用的是SESSION,而识别SESSION需要依靠Cookie中的SESSIONID。其实最根本的问题就是http和https下的Cookie是否可以共享。那么https协议下写入Cookie的SESSIONID,在跳转到http协议后能够正常读取吗?第一反应是不行,因为浏览器有同源策略,那实际情况又是怎么样的呢?
实际情况
- 经过测试,当混用http和https时,firefox、chrome、ie8都可以正常读取Cookie
- https协议下,浏览器默认不会加载页面中的http请求(图片会正常加载,js和css不加载)。可以不写明具体的协议只写两个斜杠,即用//代替http://和https://,这样浏览器加载的时候会自动匹配当前页面的协议。这也是Google HTML/CSS Style Guide推荐的方式。
总结
- Cookie的安全策略和Javascript的同源策略并不完全相同,Cookie只受Domian、Path、Expires、HttpOnly、Secure等属性的影响。
- Cookie的传输并不受端口限制。
- 当Cookie属性secure设置为true时,Cookie只能在https中传输,http不会传输。