• JavaWeb12-Session


    Session介绍

    在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

    关于HttpSession对象

    • Session的作用 Session的作用就是为了标识一次会话,或者说确认一个用户。并且在一次会话(一个用户的多次请求)期间共享数据,可以通过req.geySession()方法,来获取当前会话的session对象。

    • JSESSIONID SessionId是为了标识一次会话的唯一标志。每当一次请求到达服务器,如果开启了会话(访问了session),服务器第一步会查看是否从客户端回传一个名为JSESSONID的cookie: 1)、如果JSESSIONID不存在,则服务器会新建session对象,并重新标识; 2)、如果JSESSIONID存在,服务器会将客户端回传过来的ID去服务器中查找与之对应的session对象。 3)、如果没找到,则服务器会新建session对象,并重新标识; 4)、如果找到,则获取session对象,响应给客户端

    • Session域对象 通过setAttribute(name,value); 方法向域对象中添加数据。 通过getAttribute(name); 从域对象中获取数据。 通过removeAttribute(name);从域对象中移除数据。

    • Session的失效 1)、达到最大不活动时间 Tomcat中默认最大不活动事件为30min。 可以自行修改默认不活动时间,但不建议。 2)自己设定过期时间 通过session.setMaxInactiveInterval(int);来设定session的最大不活动时间,单位为秒。 通过getMaxInactiveInterval()方法来查看当前session对象的最大不活动时间。 3)、立即失效 手动销毁session对象 session.invalidate(); 4)、关闭浏览器 session的底层依赖于cookie,默认关闭浏览器失效。 5)、关闭服务器 非正常关闭服务器才会失效。 如果是正常关闭服务器,session会被钝化到本地磁盘,下次访问时会从本地磁盘中活化出来。

    public class Servlet01 extends HttpServlet {
       @Override
       protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           resp.setContentType("text/html;charset=utf-8");
           resp.setCharacterEncoding("utf-8");
           req.setCharacterEncoding("utf-8");
           HttpSession session = req.getSession(); // 获取Session
           session.setAttribute("name", "张三"); // 添加属性
           String id = session.getId(); // 获取Session的id
           System.out.println(id); // 观察是否为新的id, 如果和上面的id不一样,说明为新创建的
           resp.getWriter().write("是否为新" + String.valueOf(session.isNew())); // 判断Session是否为新创建的
      }
       @Override
       protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           doGet(req, resp);
      }
    }

    设置session的失效时间

    session.setMaxInactiveInterval(); // 单位:秒

    设置session的失效时间也可以通过以下方式, 在web.xml中进行统一设置

    <!-- 可以设置session 的有效时间 -->
     <session-config>
       <!-- 以分钟为单位 -->
       <session-timeout>1</session-timeout>
     </session-config>

    setMaxInactiveInterval和session-config的比较:

    1、setMaxInactiveInterval的优先级高,如果setMaxInactiveInterval没有设置,则默认是session-config中设置的时间。

    2、setMaxInactiveInterval设置的是当前会话的失效时间,不是整个web服务的。

    3、setMaxInactiveInterval的参数是秒,session-config当中配置的session-timeout是分钟。

    4、设置setMaxInactiveInterval(-1)是永久有效。(负数或0)

    public class Servlet02 extends HttpServlet {
       @Override
       protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           resp.setContentType("text/html;charset=utf-8");
           resp.setCharacterEncoding("utf-8");
           req.setCharacterEncoding("utf-8");
           HttpSession session = req.getSession();
           session.setAttribute("name", "张三"); // 添加属性
           Object name = session.getAttribute("name"); // 也可以获取对象
           System.out.println(name);
           // 删除session中的属性
           session.removeAttribute("name");
           // 注销session, 一旦注销, 会产生一个新的sessionid
           session.invalidate();
           System.out.println(session.getId());
      }
       @Override
       protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           doGet(req, resp);
      }
    }

    输出如下,一旦注销,会产生一个新的sessionID

  • 相关阅读:
    【jQuery插件】使用cropper实现简单的头像裁剪并上传
    Hibernate与 MyBatis的比较
    ES引擎原理介绍
    ES中的分词器研究
    服务转发Feign
    hytrix的python实现
    Consul的服务注册与发现-python版本
    setupTools工具新建项目
    docker系统学习
    NLP关键技术
  • 原文地址:https://www.cnblogs.com/Patrick20726/p/13586394.html
Copyright © 2020-2023  润新知