关于删除cookie的一点疑惑?

颖辉小居 发布于 2017/08/29 14:14
阅读 117
收藏 0
Cookie[] cookies = request.getCookies();
		if (cookies != null) {
			for (Cookie cookie : cookies) {
				if ("sso".equals(cookie.getName())) {
					cookie.setMaxAge(0);// 设置为0秒即为删除
					cookie.setPath("/");
					response.addCookie(cookie);//为什么必须要有这一行?
				}
			}
		}

上面的代码为什么要 

response.addCookie(cookie);

这个cookie并不是新建的而是以前处理请求时添加的,request中本身就有。我拿到的cookie不是引用吗?直接修改就应该生效设置啊,为什么需要重新add一次。

加载中
1
依然菜刀
依然菜刀

覆盖是正解!服务器端修改/添加Cookie是通过ResponseHeader中的Set-Cookie头实现的。。。如果你不add,那么响应头里面就没有Set-Cookie头,自然客户端也不会对Cookie做任何的修改了。

至少java-servlet中对cookie的实现没有对cookie.setMaxAge(0)做自动添加到ResponseHeader然后删除cookie的支持,java-servlet中cookie就是一个普通的javabean

1
Eric_林
Eric_林

cookie本身是删除不了的,而是覆盖了一个周期为0的上去,从而实现删除

0
Minho
Minho

服务器端需要将cookie重新写到客户端,这样才能覆盖客户端的cookie。

Minho
Minho
回复 @颖辉小居 : cookie的生存周期一般是:request请求->response写入->request请求时携带->response可修改或删除。
颖辉小居
颖辉小居
你好,session的 id 也在cookie中,肯定是底层自己会从request中写入到response中的,那这个我自己添加的cookie我只是获得引用并修改,应该也会复制到response中吧。
返回顶部
顶部