让人头疼的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对象。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值