写点什么

【Java Web 系列】Session 的原理分析和使用细节

作者:倔强的牛角
  • 2022 年 6 月 15 日
  • 本文字数:1443 字

    阅读完需:约 5 分钟

写在前面😘

大一电子信息工程新生,请多多关照,希望能在 InfoQ 社区记录自己的学习历程!

一、Session 原理分析

Session 是基于 Cookie 实现的



  1. 当客户端第一次请求会话对象时,服务器会创建一个 Session 对象,并为该 Session 对象分配一个唯一的 SessionID(用来标识这个 Session 对象);

  2. 服务器将 SessionID 以 Cookie(Cookie 名称为:“JSESSIONID”,值为 SessionID 的值,如Set-Cookie:JESSIONID=10)的形式发送给客户端浏览器;

  3. 客户端浏览器再次发送 HTTP 请求时,会将携带 SessionID 的 Cookie (如cookie: JESSIONID=10)随请求一起发送给服务器;

  4. 服务器从请求中读取 SessionID,然后根据 SessionID 找到对应的 Session 对象。


  • 同一次会话中,多次请求获取的是同一个Session对象



注意

  • 流程中的 Cookie 是容器自动生成的,它的 maxAge 属性取值为 -1,表示仅当前浏览器有效。

  • 浏览器关闭时,对应的 Session 并没有失效,但此时与此 Session 对应的 Cookie 已失效,导致浏览器无法再通过 Cookie 获取服务器端的 Session 对象。

  • 同一浏览器的不同窗口共享同一 Session 对象,但不同浏览器窗口之间不能共享 Session 对象。

二、Session 使用细节

1️⃣Session 钝化与活化

钝化:在服务器正常关闭后,Tomcat 会自动将 Session 数据写入硬盘的文件中

活化:再次启动服务器后,从文件中加载数据到 Session 中

钝化和活化的过程是 Tomcat 自己完成的,不需要我们参与,我们只需要了解下即可


  • 钝化的数据路径为:项目目录\target\tomcat\work\Tomcat\localhost\项目名称\SESSIONS.ser

  • 数据加载到 Session 中后,路径中的SESSIONS.ser文件会被删除掉

2️⃣Session 销毁

Session 对象在服务器中驻留一段时间后没有被使用,就会被销毁,这个时间就是 Session 的过期时间

Session 的默认过期时间为 30 分钟(默认值是在 Tomcat 的 web.xml 配置文件),我们可以通过如下两种方式设置过期时间。

a.使用 <session-config> 元素

  • web.xml 中,使用<session-config> 及其子元素 <session-timeout> 可以配置 Session 的默认过期时间


<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"         version="4.0">    <!--设置session的过期时间-->    <session-config>        <!--单位:分钟-->        <session-timeout>100</session-timeout>    </session-config></web-app>
复制代码


  • <session-timeout> 元素用来指定默认 Session 过期时间,以分钟为单位,该元素值必须为整数

  • <session-timeout> 元素的值为零或负数,表示 Session 永远不会过期

b.调用 setMaxInactiveInterval() 方法

通过调用 session.setMaxInactiveInterval(int interval) 设置过期时间,以秒为单位,零和负数表示会话永远不会过期,代码如下。


//设置会话的过期时间,单位:秒request.getSession().setMaxInactiveInterval(100);
复制代码

3️⃣Session 生命周期

Session 对象创建

Session 对象在容器第一次调用 request.getSession() 方法时创建。


值得注意的是,当客户端访问的 Web 资源是 HTML,CSS,图片等静态资源时,服务器不会创建 Session 对象。

Session 对象销毁

Session 对象在如下 3 种情况下会被销毁:


  • Session 过期;

  • 调用 session.invalidate() 方法,手动销毁 Session;

  • 服务器关闭或者应用被卸载。

写在后面🍻

感谢观看啦✨

有什么不足,欢迎指出哦💖

发布于: 刚刚阅读数: 5
用户头像

把学问造就,还期身健行优。 2022.06.02 加入

大一在读,电子信息工程专业。 希望在InfoQ写作社区记录自己的学习历程!

评论

发布
暂无评论
【Java Web 系列】Session的原理分析和使用细节_Java_倔强的牛角_InfoQ写作社区