Servlet(五):HttpSession对象
一、HttpSession对象概述
1. 无父接口,用来记住用户/记住一次会话
2. 服务器存储session的全部数据,浏览器只存储session的id
3. 当服务器关闭的时候,服务器中的session全部清空,session失效;
4. 当浏览器关闭时,若硬盘未存储对应的cookie,session失效;
二、Session使用流程
1. 浏览器带着cookie访问服务器
2. 服务器查找是否有name=JSESSIONID的cookie,
没有则创建一个新的session
3. 新session的数据(session的ID、登录、临时数据、最新访问时间等)存储到服务器,
同时服务器创建一个cookie:name=JSESSIONID、value=新sessionID,并将该cookie响应给浏览器
4. 带着新sessionID的cookie存储到浏览器
5. 浏览器再次带着cookie访问服务器
6. 服务器查找是否有name=JSESSIONID的cookie,
有则根据该cookie的value去服务器找是否有ID能匹配得上的session
能匹配上,服务器读取/修改session的数据
匹配不上,服务器创建一个新的session,带着新sessionID的cookie会回到浏览器覆盖对应的旧cookie
三、Session的获取和常用方法
1. req.getSession() //获取session对象,存在session则获取,不存在则创建
2. session.getId() //获取session的id(会话标识符)
3. session.getCreateTime() //获取session的创建时间
4. session.getLastAccessedTime() //获取session的最新访问时间
四、 Session域对象
1. Session域对象的设置、移除、获取
(1)session.setAttribute() //设置session域对象
(2)session.removeAttribute() //移除session域对象
(3)sessiom.getAttribute() //获取session域对象
2. 对比session域对象和request域对象
(1)请求转发:
session域对象有效,request域对象有效
(2)重定向:
session域对象有效,request域对象无效
@WebServlet("/ss02")
public class Session02 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/* 1. 获取session对象 */
HttpSession session = req.getSession();
/* 2. 设置域对象 */
// 设置session域对象
session.setAttribute("username1","zhangsan");
session.setAttribute("password1","123456");
// 设置request域对象
req.setAttribute("username2","lisi");
req.setAttribute("password2","123456");
/* 3. 移除session域对象 */
session.removeAttribute("password1");
/* 4. 请求转发 */
req.getRequestDispatcher("login.jsp").forward(req, resp);
/* 5. 重定向 */
//resp.sendRedirect("login.jsp");
}
}
<html>
<head>
<title>login.jsp</title>
</head>
<body>
<%
/* 获取域对象 */
// 获取session域对象
String username1 = (String)request.getSession().getAttribute("username1");
String password1 = (String)request.getSession().getAttribute("password1");
// 获取request域对象
String username2 = (String)request.getAttribute("username2");
String password2 = (String)request.getAttribute("password2");
out.print("session域对象:<br>");
out.print("username1: " + username1 + ",password1: " + password1 + "<br>");
out.print("request域对象:<br>");
out.print("username2: " + username2 + ",password2: " + password2 + "<br>");
%>
</body>
</html>
注意:request、out都是jsp的内置函数,需要导入tomcat的jsp-api.jar包,详见下文的第三步(4)
Web基础(二):Idea集成Tomcat-CSDN博客
https://blog.csdn.net/kamal_happy/article/details/160252567
五、 Session到期时间
在session到期时间内一直未操作,则session失效
在session到期时间内一旦有新操作,重新计时
1. 默认到期时间
(1)默认30min
(2)更改默认到期时间:打开tomcat目录下-conf目录-web.xml文件,
修改session-config的session-timeout的值(单位min)

2. 手动设置到期时间
(1)session.getMaxInactiveInterval() //获取最大不活动时间
(2)session.setMaxInactiveInterval() //设置最大不活动时间(单位s)
3. 立即销毁
session.invalidate() //立即销毁session(用于退出账号)
4. 关闭浏览器
若对应的cookie只存于浏览器而未存于硬盘,关闭浏览器,则session失效
5. 关闭服务器
关闭服务器,清空服务器存储的全部session,则session失效
更多推荐




所有评论(0)