目录
- HttpSession概述
- 原理图
- 应用场景
- HttpSession的使用
- getSession方法的处理逻辑
- HttpSession的时效性
- 为什么要设置session的时效
HttpSession概述
HttpSession是一种保留更多信息在服务端的一种技术,服务器会为每一个客户端开辟一块内存空间,即session对象,客户端在发送请求时,都可以使用自己的session,这样服务端就可以通过session来记录某个客户端的状态了
- 服务端在为客户端创建session时,会同时将session对象的id,即JSESSIONID以cookie的形式放入响应对象
- 后端创建完session后,客户端会收到一个特殊的cookie,叫做JSESSIONID
- 客户端下一次请求时携带JSESSIONID,后端收到后,根据JSESSION找到对应的session对象
- 通过该机制,服务端通过session就可以存储一些专门针对某个客户端的信息了
- session也是域对象
原理图
应用场景
- 记录用户的登录状态
用户登录后,将用户的账号等敏感信息存入session - 记录用户操作的历史
例如记录用户的访问痕迹,用户的购物车信息等临时性的信息
HttpSession的使用
getSession方法的处理逻辑
创建servlet1
packagecom.baidu.servlet;importjakarta.servlet.ServletException;importjakarta.servlet.annotation.WebServlet;importjakarta.servlet.http.HttpServlet;importjakarta.servlet.http.HttpServletRequest;importjakarta.servlet.http.HttpServletResponse;importjakarta.servlet.http.HttpSession;importjava.io.IOException;@WebServlet("/servlet1")publicclassServlet1extendsHttpServlet{protectedvoidservice(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{// 接收请求中username参数Stringusername=req.getParameter("username");// 获得session对象HttpSessionsession=req.getSession();// 先判断请求中有没有一个特殊的cookie key就是JSESSIONID// 如果有// 根据JSESSIONID去找对应的SESSION对象// 找到了// 返回之前的session// 没找到// 创建一个新的session返回,并且向response对象中存放一个JSESSION的cookie// 如果没有// 该方法会创建一个新的session返回,并且向response对象中存放一个JSESSIONID的cookieSystem.out.println(session.getId());System.out.println(session.isNew());session.setAttribute("username",username);// 客户端响应信息resp.setContentType("text/html;charset=UTF-8");resp.getWriter().write("成功");}}编写servlet2
HttpSession的时效性
为什么要设置session的时效
- 用户量很大之后,session对象相应的也要创建很多,如果一味创建不释放,那么服务器端的内存迟早要被耗尽
- 客户端关闭行为无法被服务端直接侦测,或者客户端较长时间不操作也经常出现,类似这种情况,就需要对sesion的时限进行设置了
默认的session最大闲置时间(两次使用同一个session中的间隔时间)
在tomcat/conf/web.xml中配置为30分钟
我们也可以自己在当前项目的web.xml对最大闲置时间进行重新设定(设置完后,重新启动Tomcat)
也可以通过HttpSession的API对最大闲置时间进行设定
// 单位是秒session.setMaxInactiveInterval(60);也可以直接让session失效
session.invalidate();