让人头疼的Cookie

说实话,关于Cookie,看上去相当简单的一个技术。

手册上是这么说的:一小段信息,存在浏览器上的一小段标记信息。Cookie的主体是一个键值对构成,键值对都是字符串形式的。Cookie由服务端创建,不是浏览器自己创建的,服务端创建后发给浏览器。而浏览器在访问服务器时,在一定情况下会再次带给服务器。这样传递浏览器上的信息。浏览器和服务端中便形成了一定的私下通信。

打个比方,就像虚竹他妈(服务器) 在他背上留了戒点印记。后来他妈就认出虚竹(浏览器)来了。

通过上面的描述,Cookie的原理很形象了。

Java中的Cookie:

看似很简单,用起来很费劲,这是我这几天使用的感受。

注意一:服务器添加Cookie时,一定要指定Path.

如果不指定path,浏览器虽然不会把这个Cookie无视掉,但是它会查看需要访问的URL,没有Path的Cookie和你本身的URL不匹配,就不会再带这个Cookie到Http请求中。最后你给浏览器的Cookie就回不来了。

Cookie cookie= new Cookie("time", "time");
		cookie.setMaxAge(60*60*24);
		cookie.setPath(request.getContextPath());//必须的
		response.addCookie(cookie);


注意二:今天遇到比较坑的事。

  你再次从浏览器获得Cookie时,调用Cookie对象的public intgetMaxAge()方法,返回始终为-1.API上是下面这样说的:

Returns the maximum age of the cookie, specified in seconds, By default,-1 indicating the cookie will persist until browser shutdown.

返回Cookie的最大期限,单位是秒。返回-1则表示,Cookie有效期直到关闭浏览器为止。这不是坑吗?我设置了足够长的时间,下次返回依然是-1。

Cookie [] cookies= request.getCookies();
		for(Cookie co:cookies){
			if("time".equals(co.getName()))
				System.out.println(co.getMaxAge());//再次获取时,始终为-1

注意三:没有删除Cookie的方法。只有覆盖原来的Cookie,再将Cookie的最大期限设置为0或以下。

Cookie cookie= new Cookie("time", "time");
		cookie.setMaxAge(0);     //干掉Cookie的关键是1.时间
		cookie.setPath(request.getContextPath());//2.path要与想干掉的Cookie对象的paht一致。
		response.addCookie(cookie);


总结:Cookie对象由名字和path唯一确定这个Cookie对象。





<think>首先,用户的问题是关于清除Cookie是否会导致其失效。根据引用内容,我需要基于提供的引用信息来回答。 回顾引用内容: - 引用[1]: 提到清除Cookie的方法,包括设置Cookie的过期时间为过去的时间点来删除它。 - 引用[2]: 解释Cookie的失效时间,包括时间到了失效、手动清除Cookie,以及Session。 - 引用[3]: 描述Java中设置Cookie失效的步骤,包括创建Cookie、设置失效时间、添加到响应等。 - 引用[4]: 详细说明Cookie的属性,如maxAge属性,其中maxAge为0表示删除Cookie。 - 引用[5]: 似乎是iOS代码片段,但内容不完整。 关键点:清除Cookie确实会导致其失效。引用[1]明确指出通过设置过期时间为过去的时间点来删除Cookie,引用[4]提到maxAge设置为0表示删除Cookie,引用[2]提到手动清除Cookie。 所以,回答是:是的,清除Cookie会让Cookie失效。 现在,根据系统级指令: - 所有行内数学表达式必须使用$...$格式。但这个问题是关于Cookie的,没有数学表达式,所以不需要。 - 独立公式必须使用$$...$$格式并单独成段。同样,没有公式。 - LaTeX语法正确:不适用。 - 使用中文回答:必须用中文。 - 生成相关问题:在回答末尾添加相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。我需要引用提供的引用内容。 回答结构: 1. 直接回答问题:清除Cookie会让Cookie失效。 2. 解释原因:基于引用内容,清除Cookie是通过设置过期时间为过去或使用其他方法使其失效。 3. 添加引用:在解释中自然地添加引用标识。 4. 生成相关问题:在最后添加相关问题。 相关问题应该基于主题:Cookie清除、失效等。 可能的主题: - 如何清除Cookie? - Cookie失效的条件? - 清除Cookie后的影响? 基于引用,可以生成如: 1. 清除Cookie的具体方法有哪些? 2. Cookie的maxAge属性如何影响其失效? 3. 清除Cookie后,用户会话会发生什么变化? 确保回答真实可靠:基于提供的引用。 最终回答结构: - 开头:直接回答用户问题。 - 解释:简要说明清除Cookie如何导致失效。 - 引用:添加引用标识。 - 相关问题:以“§§相关问题§§”开头,然后列出问题。 用户问题:"我想了解清除Cookie是否会导致其失效 请问清除Cookie会让Cookie失效吗" 所以,回答:"是的,清除Cookie会让Cookie失效。" 然后解释。</think>是的,清除Cookie会让Cookie失效。这是因为清除操作本质上是通过设置Cookie的过期时间为过去的时间点,或直接删除其存储,使浏览器不再将其视为有效数据。具体来说: - 当您手动清除Cookie(例如通过浏览器设置或JavaScript代码),Cookie会被立即移除,客户端(浏览器)将无法再访问它,从而失效[^1][^2]。 - 在技术实现中,设置Cookie的`maxAge`属性为0(或负数)会触发删除机制,导致Cookie在客户端被标记为过期并被清除[^3][^4]。例如,在JavaScript中,通过设置`expires`为过去日期来实现清除: ```javascript document.cookie = "cookieName=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"; ``` 这会使Cookie失效,因为浏览器在后续请求中不会发送该Cookie[^1][^4]。 总之,清除Cookie是使其失效的直接手段,常用于维护用户隐私或重置会话状态[^1][^2][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值