但凡做web项目的,或多或少的会接触cookie。做j2ee也不例外。本人也一直使用,不能说不熟,但今天有人问.setSecure();方法的作用时,还真不敢说出一二来。因为我没使用过。只是看书时,有这样的一句话:
- Set-Cookie 的 secure 属性就是处理这方面的情况用的,它表示创建的 cookie 只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以绝对不会被窃到
也很好理解:setSecure(true); 的情况下,只有https才传递到服务器端。http是不会传递的。
做j2ee的人都知道servlet的接口中也定义了Cookie对象,也有其方法setSecue(false);
现在我提出问题:在http连接下
- 当setSecure(true)时,浏览器端的cookie会不会传递到服务器端?
- 当setSecure(true)时,服务器端的cookie会不会传递到浏览器端?
- 答案:1)不会 ; 2)会
原理:服务器端的Cookie对象是java中的对象,请不要和浏览器端的cookie文件混淆了。服务器端的Cookie对象是方便java程序员包装 一个浏览器端的cookie文件。一但包装好,就放到response对象中,在转换成http头文件。在传递到浏览器端。这时就会在浏览器的临时文件中 创建一个cookie文件。
但我们再次访问网页时,才查看浏览器端的cookie文件中的secure值,如果是true,但是http连接。这个cookie就不会传到服务器端。当然这个过程对浏览器是透明的。其他人是不会知道的。
总结如下:secure值为true时,在http中是无效的;在https中才有效。