介绍cookie的两个属性:
1.Cookie的Secure属性,意味着保持Cookie通信只限于加密传输,指示浏览器仅仅在通过安全/加密连接才能使用该Cookie。如果一个Web服务器从一个非安全连接里设置了一个带有secure属性的Cookie,当Cookie被发送到客户端时,它仍然能通过中间人攻击来拦截。
2.Cookie的HttpOnly属性,指示浏览器不要在除HTTP(和HTTPS)请求之外暴露Cookie。一个有HttpOnly属性的Cookie,不能通过非HTTP方式来访问,例如通过调用JavaScript(例如,引用document.cookie),因此,不可能通过跨域脚本(一种非常普通的攻击技术)来偷走这种Cookie。尤其是Facebook和Google正在广泛地使用HttpOnly属性。
事发原因,某台测试机器上突然发现登陆后报后台错误,进一步发现浏览器请求后端服务时header不会带上cookie参数, 然后发现登陆时返回的响应写入的cookie中带有两个属性,一个是Security=secure,一个是HttpOnly,
测试服务中我们使用的是http协议,而非https,由于secure属性的存在,导致浏览器在与服务器通信时不会使用该cookie.
后面把tomcat/conf/server.xml中有一个secure="true"的配置去掉,正是这个配置影响了cookie的这个属性。
因为我们使用了如下代码去判断当前协议是否https:
if(req.isSecure()){
cookie.setSecure(true);
}