Session的工作机制

简介: Session的工作机制

Session的工作机制

  • 用户第一次请求服务器时,服务器端会生成一个sessionid
  • 服务器端将生成的sessionid返回给客户端,通过set-cookie
  • 客户端收到sessionid会将它保存在cookie中,当客户端再次访问服务端时会带上这个sessionid
  • 当服务端再次接收到来自客户端的请求时,会先去检查是否存在sessionid,不存在就新建一个sessionid重复1,2的流程,如果存在就去遍历服务端的session文件,找到与这个sessionid相对应的文件,文件中的键值便是sessionid,值为当前用户的一些信息
  • 此后的请求都会交换这个 Session ID,进行有状态的会话。

1、文字描述

前提:浏览器正常访问服务器

  • 服务器端没调用request.getSession()方法:什么都不会发生
  • 服务器端调用了request.getSession()方法
  • 服务器端检查当前请求中是否携带了JSESSIONID的Cookie
  • 有:根据JSESSIONID在服务器端查找对应的HttpSession对象
  • 能找到:将找到的HttpSession对象作为request.getSession()方法的返回值返回
  • 找不到:服务器端新建一个HttpSession对象作为request.getSession()方法的返回值返回
  • 无:服务器端新建一个HttpSession对象作为request.getSession()方法的返回值返回

2、流程图描述

3、代码验证

实现步骤

1.调用request对象的方法尝试获取HttpSession对象

2.调用HttpSession对象的isNew()方法

3.打印HttpSession对象是否为新对象

4.调用HttpSession对象的getId()方法

5.打印JSESSIONID的值

// 1.调用request对象的方法尝试获取HttpSession对象
HttpSession session = request.getSession();
// 2.调用HttpSession对象的isNew()方法
boolean wetherNew = session.isNew();
// 3.打印HttpSession对象是否为新对象
System.out.println("wetherNew = " + (wetherNew?"HttpSession对象是新的":"HttpSession对象是旧的"));
// 4.调用HttpSession对象的getId()方法
String id = session.getId();
// 5.打印JSESSIONID的值
System.out.println("JSESSIONID = " + id);

4、时效性

①为什么Session要设置时限

用户量很大之后,Session对象相应的也要创建很多。如果一味创建不释放,那么服务器端的内存迟早要被耗尽。

②设置时限的难点

从服务器端的角度,很难精确得知类似浏览器关闭的动作。而且即使浏览器一直没有关闭,也不代表用户仍然在使用。

③服务器端给Session对象设置最大闲置时间

  • 默认值:1800秒

最大闲置时间生效的机制如下:

④代码验证

实现步骤

1.测试时效性

2.获取默认的最大闲置时间

3.设置默认的最大闲置时间

// ※测试时效性
// 获取默认的最大闲置时间
int maxInactiveIntervalSecond = session.getMaxInactiveInterval();
System.out.println("maxInactiveIntervalSecond = " + maxInactiveIntervalSecond);
// 设置默认的最大闲置时间
session.setMaxInactiveInterval(15);

⑤强制Session立即失效

session.invalidate();


目录
相关文章
|
4月前
|
存储 前端开发 程序员
|
存储
Cookie的工作机制
Cookie的工作机制
46 0
|
存储 数据安全/隐私保护
session的概念特点及原理
session的概念特点及原理
91 0
|
存储 NoSQL Java
分布式session的几种解决方案,你中意哪种?
在分布式环境下,session就会出现问题了,假如服务端部署在两个服务器A和B上。第一次往购物车添加商品时,请求落在了服务器A上,服务器A创建了一个session,并返回JessionId,第二次往购物车添加商品时,请求落在了服务器B上,请求携带的JesssionId在服务器B上并不会找到对应的session。这时候服务器B就会创建一个新的session,并返回对应的JessionId,客户端发现第一次添加的商品丢失了。。。
1081 0
分布式session的几种解决方案,你中意哪种?
|
应用服务中间件 API
Web阶段:第十七章:Session会话
Web阶段:第十七章:Session会话
Web阶段:第十七章:Session会话
|
缓存 Java 应用服务中间件
代理和 Session 机制(2)|学习笔记
快速学习代理和 Session 机制
代理和 Session 机制(2)|学习笔记
|
存储 负载均衡 安全
代理和 Session 机制(4)|学习笔记
快速学习代理和 Session 机制
代理和 Session 机制(4)|学习笔记
|
缓存 负载均衡 Java
代理和 Session 机制|学习笔记
快速学习代理和 Session 机制
代理和 Session 机制|学习笔记
|
缓存 负载均衡 Java
代理和 Session 机制(1)|学习笔记
快速学习代理和 Session 机制
代理和 Session 机制(1)|学习笔记
|
存储 Go 数据库
第二十章 CSP Session 管理 - 状态管理
第二十章 CSP Session 管理 - 状态管理
92 0