cookie概述

什么是cookie

cookie是由一个键和一个值构成,随着服务器端的响应发送给客户端。然后客户端将cookie存储起来,下次再次访问服务器端时再发送给服务器端。

cookie规范

  • Cookie大小上限为4KB;
  • 一个服务器最多在客户端浏览器上保存20个Cookie;
  • 一个浏览器最多保存300个Cookie;

cookie与HTTP头

Cookie是通过HTTP请求和响应头在客户端和服务器端传递的:

  • Cookie:请求头,客户端发送给服务器端;
  • 格式:Cookie: a=A; b=B; c=C。即多个Cookie用分号离开;
  • Set-Cookie:响应头,服务器端发送给客户端;
  • 一个Cookie对象一个Set-Cookie:

Set-Cookie: a=A

Set-Cookie: b=B

Set-Cookie: c=C

服务器如果重复发送cookie会覆盖原来的。

cookie的生命期

生命就是Cookie在客户端的有效时间,可以通过setMaxAge(int)来设置Cookie的有效时间。

  • cookie.setMaxAge(-1):cookie的maxAge属性的默认值就是-1,表示只在浏览器内存中存活。一旦关闭浏览器窗口,那么cookie就会消失。
  • cookie.setMaxAge(60*60):表示cookie对象可存活1小时。当生命大于0时,浏览器会把Cookie保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie也会存活1小时;
  • cookie.setMaxAge(0):cookie生命等于0是一个特殊的值,它表示cookie被作废!也就是说,如果原来浏览器已经保存了这个Cookie,那么可以通过Cookie的setMaxAge(0)来删除这个Cookie。无论是在浏览器内存中,还是在客户端硬盘上都会删除这个Cookie。

cookie的路径

设置Cookie的path来指定浏览器,在访问什么样的路径时,包含什么样的Cookie。

只要客户端访问服务器的路径中包含cookie路径,请求中就会包含对应的cookie

下面是客户端浏览器保存的3个Cookie的路径:

a:/cookietest;

b:/cookietest/servlet;

c:/cookietest/jsp;

下面是浏览器请求的URL:

A: http://localhost:8080/cookietest/AServlet;

B: http://localhost:8080/cookietest/servlet/BServlet;

C: http://localhost:8080/cookietest/jsp/CServlet;

 

  • 请求A时,会在请求中包含a;
  • 请求B时,会在请求中包含a、b;
  • 请求C时,会在请求中包含a、c;

设置cookie路径

设置Cookie的路径需要使用setPath()方法,例如:

cookie.setPath(“/cookietest/servlet”);

如果没有设置Cookie的路径,那么Cookie路径的默认值当前访问资源所在路径,例如:

  • 访问http://localhost:8080/cookietest/AServlet时添加的Cookie默认路径为/cookietest;
  • 访问http://localhost:8080/cookietest/servlet/BServlet时添加的Cookie默认路径为/cookietest/servlet;
  • 访问http://localhost:8080/cookietest/jsp/BServlet时添加的Cookie默认路径为/cookietest/jsp;

cookie的域(domain)

Cookie的domain属性可以让网站中二级域共享Cookie

一下是百度的域名

http://www.baidu.com

http://zhidao.baidu.com

http://news.baidu.com

http://tieba.baidu.com

现在我希望在这些主机之间共享Cookie(例如在www.baidu.com中响应的cookie,可以在news.baidu.com请求中包含)。很明显,现在不是路径的问题了,而是主机的问题,即域名的问题。处理这一问题其实很简单,只需要下面两步:

  • 设置Cookiepath为“/”:c.setPath(“/”)
  • 设置Cookiedomain为“.baidu.com”:c.setDomain(“.baidu.com”)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值