• Servlet学习(八):Session


    一、Session的基本使用

    1. 概念

    Session:服务端会话跟踪技术:将数据保存到服务端。

    • Session是存储在服务端而Cookie是存储在客户端
    • 存储在客户端的数据容易被窃取和截获,存在很多不安全的因素
    • 存储在服务端的数据相比于客户端来说就更安全
    2. Session的工作流程
    • 在服务端的AServlet获取一个Session对象,把数据存入其中
    • 在服务端的BServlet获取到相同的Session对象,从中取出数据
    • 就可以实现一次会话中多次请求之间的数据共享了
    3. Session的基本使用

    在JavaEE中提供了HttpSession接口,来实现一次会话的多次请求之间数据共享功能。

    具体的使用步骤为:

    • 获取Session对象,使用的是request对象
    HttpSession session = request.getSession();
    
    • 1
    • Session对象提供的功能:

      • 存储数据到 session 域中

        void setAttribute(String name, Object o)
        
        • 1
      • 根据 key,获取值

        Object getAttribute(String name)
        
        • 1
      • 根据 key,删除该键值对

        void removeAttribute(String name)
        
        • 1

    二、Session的原理分析

    Session是如何保证在一次会话中获取的Session对象是同一个呢?

    • Session是基于Cookie实现的
    • AServlet在第一次获取session对象的时候,session对象会有一个唯一的标识,假如是id:10
    • 在session中存入其他数据并处理完成所有业务后,需要通过Tomcat服务器响应结果给浏览器
    • Tomcat服务器发现业务处理中使用了session对象,就会把session的唯一标识id:10当做一个cookie,添加Set-Cookie:JESSIONID=10到响应头中,并响应给浏览器
    • 浏览器接收到响应结果后,会把响应头中的coookie数据存储到浏览器的内存中
    • 浏览器在同一会话中访问BServlet的时候,会把cookie中的数据按照cookie: JESSIONID=10的格式添加到请求头中并发送给服务器Tomcat
    • 获取到请求后,从请求头中就读取cookie中的JSESSIONID值为10,然后就会到服务器内存中寻找id:10的session对象,如果找到了,就直接返回该对象,如果没有则新创建一个session对象
    • 关闭打开浏览器后,因为浏览器的cookie已被销毁,所以就没有JESSIONID的数据,服务端获取到的session就是一个全新的session对象

    三、Session的使用细节

    1. Session钝化与活化
    • 服务器重启后,Session中的数据是否还在?

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

      • 钝化的数据路径为:项目目录\target\tomcat\work\Tomcat\localhost\项目名称\SESSIONS.ser
    • 活化:再次启动服务器后,从文件中加载数据到Session中

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

    session的销毁会有两种方式:

    • 默认情况下,无操作,30分钟自动销毁

      • 对于这个失效时间,是可以通过配置进行修改的

        • 在项目的web.xml中配置

          
          <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_3_1.xsd"
                   version="3.1">
          
              <session-config>
                  <session-timeout>100session-timeout>
              session-config>
          web-app>
          
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
        • 如果没有配置,默认是30分钟,默认值是在Tomcat的web.xml配置文件中写死的

    • 调用Session对象的invalidate()进行销毁

  • 相关阅读:
    Redis(一)入门:五大数据类型的学习和理解①
    使用yum进行软件安装的基础命令
    系统服务控制
    如果想搭建在线客服,应该如何建、
    k8s/资源清单
    Linux入门之多线程|线程的同步|生产消费模型
    Abbexa丨Abbexa PCR超级混合液使用说明和相关研究
    C4D 2024插件Arnold mac(C4D S2024阿诺德渲染器) 中文版介绍
    测试工程师的4层技术发展路线,需要掌握哪些技能?
    Groovy(第九节) Groovy 之单元测试
  • 原文地址:https://blog.csdn.net/john1516/article/details/126897291