zoukankan      html  css  js  c++  java
  • 服务器端会话技术——session

    服务器端会话技术——session

    什么是一次会话呢,在生活中一次会话就是一次聊天,那么在J2EE中的一次会话指的是什么呢?

    简单的说,打开浏览器,访问服务器,直到浏览器关闭,称为一次会话,严格的说,一次会话应该是依赖session的生成机制,那么什么是Session的生成机制呢?

    Session生成机制:

    首先服务器必须调用request.getSession(),如果请求中没有带sessionId的cookie,则服务器一定会创建一个新的Session对象,如果请求中带了sessionID则服务器会根据传入的SessionId找到对应的session对象,如果session对象已经失效了,则会创建新的session对象,如果没有失效则会使用找到的session对象

    需要注意的是当浏览器关闭,重启浏览器时,seesionId还是存在请求中的,但是由于关闭浏览器已经使存在内存中的cookie失效了,所以sessionID只是丢失了,而并没有失效

    设置Session的空闲时间

    Session.setMaxInactiveInterval(10);

    空闲时间也就是说在规定时间内如果有重新访问则时间重置,如果没有访问那么SessionID就会失效

    使session对象强制失效:

    Session.invalidate();

    1、概念:

    服务器端 会话技术,在一次会话的多次请求间共享数据,将数据 保存 在服务器端的对象中。HttpSession

    2、快速入门:

    HttpSession对象:

    Object getAttribute(String name)

    void setAttribute(String name, Object value)

    void removeValue(String name)

    @WebServlet(name = "SessionDemo1", urlPatterns = {"/SessionDemo1"})
    public class SessionDemo1 extends HttpServlet {
      @Override
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          //使用session共享数据

          //1、获取session
          HttpSession session = request.getSession();
          //2、存储数据
          session.setAttribute("name","李逸");

          //3.1、转发方式
    //       request.getRequestDispatcher("/SessionDemo2").forward(request,response);
          //3.2、重定向
          response.sendRedirect("/day18/SessionDemo2");
      }

      @Override
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          this.doPost(request, response);
      }
    }
    @WebServlet(name = "SessionDemo2", urlPatterns = {"/SessionDemo2"})
    public class SessionDemo2 extends HttpServlet {
      @Override
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          //使用session共享数据

          //1、获取session
          HttpSession session = request.getSession();
          //2、获取数据
          Object name = session.getAttribute("name");
          System.out.println("SessionDemo2:"+name);
      }

      @Override
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          this.doPost(request, response);
      }
    }

    3、原理

    session的实现是依赖于cookie的。

    4、细节:

    1、当客户端关闭后,服务器不关闭,两次获取的session是否是同一个?

    答:默认情况下,不是。

    如果需要相同,则可以创建cookie,键为JSSIONIN,设置最大存活时间,让cookie持久化保存。

    @WebServlet(name = "SessionDemo3", urlPatterns = {"/SessionDemo3"})
    public class SessionDemo3 extends HttpServlet {
      @Override
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          HttpSession session = request.getSession();
          System.out.println(session);

          //期望客户端关闭后,session也可以相同
          Cookie cookie = new Cookie("JSESSIONID", session.getId());
          cookie.setMaxAge(60 * 60);
          response.addCookie(cookie);
      }

      @Override
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          this.doPost(request, response);
      }
    }

    2、客户端不关闭,服务器关闭后,两次获取的session是同一个吗?

    答:不是同一个,但是要确保数据不丢失。

    session的钝化:在服务器正常关闭之前,将session对象序列化到硬盘上。

    session的活化:在服务器启动后,将session文件转化为内存中的session对象即可。

    3、session的失效时间?

    1、服务器关闭

    2、Session.invalidate();使session对象强制失效

    3、session默认失效时间:30分钟

    选择性的配置修改

    <session-config>
      <session-timeout>30</session-timeout>
    </session-config>

    5、session的特点:

    1、session用于存储一次会话的多次请求的数据,存在服务器端。

    2、session可以存储任意类型,任意大小的数据。

    session与cookie的区别:

    1、session存储数据在服务器端,cookie在客户端。

    2、session没有数据大小限制 ,cookie有。

    3、session数据安全,cookie相对于不安全。

     

  • 相关阅读:
    在cmd命令行中弹出Windows对话框
    Windows远程桌面连接如何直接使用剪贴板功能
    升级Windows10后Apache服务器启动失败的解决方法
    Windows下尝试PHP7提示丢失VCRUNTIME140.DLL的问题解决
    手动构建Servlet项目的流程
    更改Apache默认网站根目录
    windows下安装Appserv等php套件之后无法进入数据库管理的问题
    Java web项目的字符集问题
    五谷-小米:白小米
    五谷-小米:黑小米
  • 原文地址:https://www.cnblogs.com/lxy522/p/12952998.html
Copyright © 2011-2022 走看看