会话 —— Session

本文详细介绍了Session的概念,作为服务器端会话技术,它用于在多次请求间共享数据,数据存储在服务器端。Session的实现依赖于Cookie,通过唯一的ID值在服务器和浏览器之间建立连接。此外,还讨论了Session的生命周期、特点,包括默认30分钟的失效时间,以及与Cookie的区别。最后,文章探讨了客户端关闭后Session的变化以及服务器关闭时如何通过钝化和活化保持数据不丢失。

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

目录

1. 概念
2. 基本操作
3. 实现原理
4. 生命周期
5. 特点
6. 其他

1. 概念

服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。

2. 基本操作

1. 获取HttpSession
HttpSession session = request.getSession();
2. 使用HttpSession
void setAttribute(String var1, Object var2); 存储数据
Object getAttribute(String var1);获取数据

3. 实现原理

Session的实现,依赖Cookie。
sesson实现原理
服务器是如何确保在一次会话范围内,多次获取的session对象是同一个?
如上图:

  1. 服务器第一次获取session时,会在内存中创建一个新的session对象,并为session对象分配唯一的ID值;
  2. 响应时,服务器会把session的ID值在响应头中,发送到客浏览器。响应头 set-cookie: JSESSIONID=ID值
  3. 浏览器收到响应,保存cookie。当浏览器再次访问服务器其他资源时,会把JSESSIONID放在请求头中。请求头:cookie: JSESSIONID=ID值
  4. 服务器收到请求,当调用getSession()方法时,服务器会根据JSESSIONID查找到这个session对象。

从而,服务器确保了在一次会话范围内,多次获取的session对象是同一个。

4. 生命周期

  1. 服务器关闭
  2. session对象,调用方法:void invalidate(); 会被销毁
  3. session默认失效时间:30分钟。
  4. session失效时间,可以选择性配置,在项目的web.xml中修改:
<session-config>
	<session-timeout>30</session-timeout>
</session-config>

5. 特点

  1. session用于存储一次会话多次请求的数据,存在服务器端。用途很广泛,可以存储大量的数据。
  2. session可以存储任意类型,任意大小的数据:void setAttribute(String var1, Object var2);
  3. session与cookie的区别
    1. session存储数据在服务器端;cookie存储数据在客户端
    2. session存储数据没有大小限制,cookie有限制;
    3. session存储数据在服务器端更安全,cookie存储在客户端不安全

6. 其他

  1. 当客户端关闭后,服务器不关闭,两次获取的session是否为同一个?

①默认情况下,不是同一个。
②也可以相同。代码实现:

// 获取session
HttpSession session = request.getSession();

// 期望客户端关闭前与重新打开后获取的session相同
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(60 * 60);// cookie存活时间1个小时
response.addCookie(cookie);
  1. 客户端不关闭,服务器关闭,两次获取的session不是同一个。

不是同一个。
若服务器关闭,再次启动后,如何确保数据不丢失?

  • session的钝化:在服务器正常关闭之前,将session对象序列化到硬盘上;
  • session的活化:在服务器启动后,将session文件转化为内存中的session对象;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值