一、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失效

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐