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

1276

被折叠的 条评论
为什么被折叠?



