Cookie和Session一篇就够了

本文深入讲解了Cookie与Session的工作原理及应用。详细介绍了Cookie的创建、保存和读取过程,以及Session的创建、管理和失效机制。同时,对比了两者在数据存储位置、安全性及使用场景上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是Cookie
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
2.服务端生成Cookie
保存在客户端
Cookie采用key:value的模式
创建Cookie

Cookie cookie = new Cookie("name","liang");

添加Cookie

response.add(cookie);

设置Cookie访问路径

//必须加上指定路径名
cookie.setPath(request.getContextPath()+"字定义路径名");

设置Cookie有效期

//单位为秒,整型值
//>0,将Cookie存到客户端的硬盘
// <0,与不设置效果相同,存在浏览器缓存
//=0,Cookie一生成,马上失效
cookie.setMaxAge(60*60);//1小时

3.服务端获取并解析Cookie
获取请求中的Cookie

Cookie[] cookies = request.getCookies();

4.域属性空间范围对比

  • ServletContext(application):置入其中的域属性是整个应用范围的,可以完成跨会话共享数据。
  • HttpSession,置入其中域属性是会话范围的,可以完成跨请求共享数据。
  • HttpServletRequest,置入其中的域属性是请求范围的,可以完成跨Servlet共享数据,但是Servlet都必须在同一请求中。
    使用原则:
    保证需求前提下,优先使用小范围的,节省空间,保证安全。

HttpSession

1.什么是session
即会话,和Cookie区别是,Session保存在服务端,Cookie在客户端。
2.创建Session

  • getSession():如果当前请求没有Session,则创建一个Session
  • getSession(boolean create);如果当前请求没有Session,并且create是true,则创建一个。
    使用原则:
  • 要向Session写入数据->getSession(true)
  • 要向Session读取数据->getSession(false)
    3.Session域属性空间的操作
    Session是一个专门存放数据的集合,称存放数据的空间为域属性空间。
    方法:
  • setAttribute(String name,Object value):向Session的域属性空间放入指定名称、指定值的域属性。
  • getAttribute(String name):从Session的域属性空间取出指定名称的域属性。
  • removeAttribute(String name):从Session的域属性空间删除指定名称的域属性。
    4.Session的工作原理
    在服务器中系统会为每一个会话维护一个Session,不同的会话,对应不同的Session。
    系统如何区分Session?
    (1)写入Session列表
    当前应用中的Session是以Map形式管理的,这个Map成为Session的列表。该Map的key是一个32位长度的随机字符串,成为JSessionID,value为Session对象的引用。
    在这里插入图片描述
    (2)服务器生成并发送Cookie
    在将Session信息写入Session列表后,系统自动将"JSessionID"作为name,这个32位长度随机字符串作为value,以Cookie的形式放在响应报头,并随着响应,将该Cookie发送到客户端。
    在这里插入图片描述
    (3)客户端接收并发送Cookie
  • 客户端接受到Cookie将其存入浏览器缓存,只要浏览器不关闭,浏览器缓存中的Cookie就不会消失。
  • 当用户调教第二次请求时,会将缓存的Cookie,伴随着请求的头部信息,一块发送到服务端。
    在这里插入图片描述
    (4)从Session列表中
    服务端从请求中读取到客户端发送过来的Cookie,并根据Cookie中的JSessionID的值,从Map中查找相应的key对应的value,即Session对象,对该Session对象的域属性空间进行读写操作。
    5.Session的失效
    在web.xm中可以通过标签设置超时时间,默认30分钟。
    需要强调的是:
    时间并不是从Session被创建开始计时的生命周期时长,而是从最后一次访问开始计时。
<session-config>
	<session-timeout>120</session-timeout>
</session-config>

若未到超时时限,可以通过代码提前使Session失效,即使用invalidate()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值