Session域对象

本文详细介绍了Session域对象在Web开发中的作用,用于会话跟踪和数据存储。讲解了如何获取Session对象,以及其常用的域对象方法和特有方法,如设置有效期和失效。同时,提到了Session有效期的注意事项,包括负数表示不过期和如何在web.xml中设置。最后,通过实例分析了Session的实际工作原理,阐述了sessionId在浏览器请求头中的传递过程。

Session域对象

在同一个客户访问服务器时,如果发生了响应重定向,则之前的request域中存在的数据就会丢失,所以出现Session域对象,用来记录是否是同一个客户进行访问,进行会话跟踪,并进行数据存储和获取。

1.Session对象的获取

我这里使用的服务器是TomCat,这里需要注意的是:

Session对象是第一次请求时由TomCat创建的,通过request对象获取

HttpSession session = req.getSession();

getSession(); —> 等价于 getSession(true); 【一般使用这种】
如果当前请求是第一次,则创建并返回Session
如果当前请求不是第一次,则直接返回它所属的Session

2.Session的常用方法

2.1域对象方法

因为Session也是域对象,所以有通用的方法:
getAttribute()/getAttributeNames/setAttribute()/removeAttribute()
java中的域对象

2.2特有方法

getCreationTime()获取session创建的时间,在格林威治时间1970年1月1日子夜开始计算,单位是毫秒。

getLastAccessedTime()获取本会话的请求消息的最后一次时间,单位是毫秒。

getMaxInactiveInterval()获取session的有效期,单位是秒,系统默认有效期为30分钟

setMaxInactiveInterval()设置session有效期,单位是秒

invalidate()将session手工失效,一般用于系统注销,这里只是将session对象解绑,存储的数据不存在,但基本属性在当前servlet中还存在,不能跨servlet传递了,例如重新设置的有效期

3.注意:

  1. Session有效期值为负数,表示从不过期。
  2. setMaxInactiveInterval 方法仅对当前Session有效。如果要统一为项目中的所有Session都设置统一的默认有效期。
    注意 web.xml 中的单位是分钟
    修改方式一:修改Tomat的配置( conf/web.xml)
    在这里插入图片描述
    修改方式二:
    在自己项目的web.xml文件中添加<session-config><session-timeout>标签
    <session-config>
        <session-timeout>10</session-timeout>
    </session-config>

4.session实际原理

因为session的设置是TomCat在浏览器第一次访问的时候创建的,因此肯定在响应中存在:
验证代码:
web.xml中配置

<?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">
    <servlet>
        <servlet-name>Demo1Servlet</servlet-name>
        <servlet-class>com.example.session.Demo1Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Demo1Servlet</servlet-name>
        <url-pattern>/d1</url-pattern>
    </servlet-mapping>
</web-app>

Demo1Servlet

public class Demo1Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        System.out.println(session.getId());
    }
}

启动服务器后,在新浏览器中先打开F12,输入地址:
在这里插入图片描述

可以看到响应回的sessionId值
再看输出语句打印的ID,和浏览器中是一致的
在这里插入图片描述然后刷新浏览器,看看第一次请求头和第二次请求头中的变化:
刷新前,
在这里插入图片描述
刷新后:cookie中加入了sessionId值
在这里插入图片描述
后续请求服务器时,浏览器会自动在请求头中携带 Cookie 告诉浏览器所属的会话ID

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值