什么是Cookie、创建Cookie及创建过程常见问题

1.Cookie对象的特点

  • 使用字符串存储数据
  • 使用Key和Value结构存储数据
  • 单个Cookie存储数据大小限制在4097个字节
  • 存储的数据中不支持中文,Servlet4.0中支持
  • 与域名绑定所以不支持跨一级域名(饭店名字)访问,但是它支持跨二级域名(分店)
  • Cookie对象保存在客户端浏览器内存或磁盘中
  • 分为持久化Cookie与状态Cookie
  • 浏览器在保存同一域名所返回Cookie的数量是有限的,不同浏览器支持的数量不同,Chrome浏览器为50个
  • 浏览器每次请求时都会把当前访问的域名相关的Cookie在请求中提交到服务器

2.Cookie对象的创建

Cookie cookie = new Cookie("key","value") ;  通过new关键字创建Cookie对象。   

response.addCookie(cookie) ;通过HttpServiceResponse对象将Cookie写回给客户端浏览器。

3.获取Cookie中的数据

   浏览器每次请求时都会把与当前域名相关的Cookie在请求中提交到服务器,通过HttpServletRequest对象获取Cookie,返回Cookie数组。

Cookie[] cookies = request.getCookies();

4.解决Cookie不支持中文

   在Cookie中value的值不能使用中文,Value的值是可以的,但是在Servlet4.0版本之前Cookie中的Value也是不支持中文存储的,如果存储的数据中含有中文,代码会直接出现异常。

异常如下:java.lang.IllegalArgumentException:Control character in cookie value or attribute.

   我们可以通过对含有中文的数据重新进行编码来解决该问题,在Servlet4.0中的Cookie的Value开始支持中文存储。 

URLEncoder.encode("content","code")  将内容按照指定的编码方式做URL编码处理

URLDecoder decode("content","code")  将内容按照指定的编码方式做URL解码处理

 5.Cookie跨域问题

域名分类

顶级域 、顶级域名(一级域名)、二级域名

举个例子:domain.xinnet.com

顶级域 :com

顶级域名:xinnet.com

二级域名:domain.xinnet.com

     域名登记的区别:一级域名比二级域名更高级,二级域名是依附于一级域名之下的附属分区域名,即二级域名是一级域名的细化分级,例如baidu.com为一级域名 news.baidu.com为二级域名,一般我们申请的都是一级域名。

     Cookie不支持以及域名的跨域,但支持二级域名的跨域。

6.状态Cookie与持久化Cookie

    状态Cookie、Cookie对象仅会被缓存在浏览器所在的内存中,当浏览器关闭后Cookie对象也会被销毁。

    持久化Cookie:浏览器会对Cookie做持久化处理,基于文件形式保存在系统的指定目录中,在Windows10系统中为了安全问题不会显示Cookie中的内容。

    当Cookie对象创建后默认为状态Cookie,可以使用Cookie对象下的cookie.setMaxAge(60)方法设置失效时间,单位为秒,一旦设置了失效时间,那么该Cooike为持久化Cookie,浏览器会将Cookie对象持久化到磁盘中,当失效时间到达后文件删除。

    Cookie对于存储内容是基于明文的方式存储的,所以安全性很低,不要在Cookie中存放敏感数据,在数据存储时,虽然在Servlet4中Cookie支持中文,但是建议对Cookie中存放的内容做编码处理,也可提高安全性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿土不土

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值