cookie的生存时间单位是_一文搞清楚Cookie概念和难点

a3d4a77f9eb2e296801975eb98e1df45.png
“大爷,你知道马冬梅家住哪吗?”
“什么冬梅啊?”
“马冬梅!”
“马什么梅啊?”
“马冬梅!”
“冬什么梅啊?”
“好嘞,大爷您歇着吧。”
“好嘞。” 《夏洛特烦恼》

没有Cookie的时代,就是这样。无论你告诉浏览器多少次,浏览器都不会记住你,因为我们发送请求更多的是使用的HTTP1.0的(现在应该是1.1),没有cookie就给我们的服务带来很大的困扰(可以使用URL但是不安全),我们不清楚用户是谁,更别提提供个性化的服务等等。

所以Cookie技术应运而生,当用户访问服务器的时候,我们在相应的时候告诉服务器,你应该存一个cookie,将用户的信息存入浏览器的缓存,那么当每一次访问的时候,你给我带过来就行了,我就知道你是谁了。

类比:
我去超市买东西。
结账的时候,收银员说你把个会员卡吧,下次来就方便了。
我说可以,然后录入自己的信息。
带着超市的卡回家了。

代码的实现:

@WebServlet

其中,resp.addCookie(c)会在响应头中添加一个set-cookie的响应头,告诉浏览器应该缓存这个cookie:

91093ccef55e01903b21001d05fe8325.png
设置cookie的相应头

这时候请求头就会设置这个cookie值,在每一次的请求中直接带到服务器,我们拿到cookie,自然就知道谁在请求。

73598b6659f68012cdecfb5e0f1d5a2d.png
获取我们需要的特定的cookie

我们可以把这个cookie就相当于存储在了浏览器的缓存中去,那么缓存中的数据主要是的操作就是增删改查,我们就简单的看下API即可。

//1. 创建cookie对象

根据cookie的最大生存时间我们可以分为

  1. 正常的cookie:expiry>0,单位是秒.
  2. 会话cookie:expiry<0,浏览器关闭,cookie删除
  3. 删除cookie,:expiry=0,立即删除cookie

Cookie的中文问题解决方案:

cookie是不能够直接存储中文的,必须通过编码之后才能够储存,类似于表单的编码,需要通过JAVA的UrlEncoder的encode和decode来编码和解码.

d0d46530e5c6f11883f23f6a6b46a030.png
设置cookie的时候需要编码才能够保存在cookie中

eea10980755b5cb9d45a01442dcd4db5.png
在页面中必须解码才能够使用,不然看起来是乱码

Cookie的路径以及域名设置的细节:

浏览器中存有多个cookie,cookie的传递规则:那个路径创建的,我传递的时候就在这个路径传递.比如,创建cookie的servlet的路径是/a/b/c/d, cookie路径就是/a/b/c,会在c路径及以下路径传递cookie.当然我们可以自己设置传递的路径:

39c862d010489d8072ce4d1c5daf39b0.png

同一个域才可以发送cookie数据.自己项目的cookie,只会发送到自己的项目.可能有多个项目,每一个项目都部署到一台服务器,都是使用的特有的域名.可能在多个项目中,都需要使用到同一个账户信息.

一级域名: http:// baidu.com
二级域名: http:// tieba.baidu.com
void setDomain(java.lang.String pattern) :设置cookie的域.
cookie.setDomain(“baidu.com”);

其实Cookie还有很多的缺点,比如

  1. cookie中存储中文麻烦.
  2. cookie保存在客户端,不安全.
  3. cookie存储的信息有限.

我们可以通过session的技术更加优雅的解决cookie所面临的问题,这个下篇文章在分享(文章图片多数由叩丁狼笔记中截图).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值