zoukankan      html  css  js  c++  java
  • Session学习

    Session学习

      Session的作用就是在服务器端保存一些用户的数据,然后传递给用户一个名字为JSESSIONID的Cookie,这个JESSIONID对应这个服务器中的一个Session对象,通过它就可以获取到保存用户信息的Session。
    1、服务器是如何实现一个session为一个用户浏览器服务的?

      • 1 服务器创建session对象,服务器给这个session对象分配一个唯一的标记JSESSIONID
      • 2 把JSESSIONID作为cookie发送给浏览器
      • 3 浏览器得到JSESSIONID保存下来,在下次访问的时候发送给服务器。
      • 4 服务器得到JSESSIONID,在服务器内存中搜索是否存在指定JSESSIONID的session对象
      • 5 如果找到,则返回该session对象
      • 6 如果找不到,可能返回null,也有可能创建一个session。

        以上六个步骤,都在下面这句话中执行了。
        HttpSession session = request.getSession();

    2、session使用步骤

    //使用request对象的getSession()获取session,如果session不存在则创建一个
    HttpSession session = request.getSession();
     //修改session
     session.setMaxInactiveInterval(30);//设置session对象的有效时间,30秒后session对象将要被销毁
    //获取session的Id String sessionId = session.getId(); //判断session是不是新创建的 if (session.isNew()) { response.getWriter().print("session创建成功,session的id是:"+sessionId);
    //保存会话数据(作为域对象)
      session.setAttribute("name", "yangqing");
        //获取设置的会话数据
    session.getAttribute("name");
    }else { response.getWriter().print("服务器已经存在session,session的id是:"+sessionId); }

    可以在web根目录下tomcat-->conf--->web.xml中统一设置session有效期

     <!-- 设置全局的session有效期(分钟) -->
      <session-config>
        <session-timeout>30</session-timeout>
      </session-config>

    可以使Session对象释放的情况

      • Session对象空闲时间达到了目标设置的最大值,自动释放
      • Session对象被强制失效
      • Web应用卸载
      • 服务器进程停止

    当需要在程序中手动设置Session强制失效时,可以手工调用session.invalidate方法,摧毁session。

    HttpSession session = request.getSession();
    //手工调用session.invalidate方法,摧毁session session.invalidate();

    3、Cookie被禁用,URL重写
       
    URL重写:将JSESSIONID的值以固定格式附着在URL地址后面,以实现保持JSESSIONID,进而保持会话状态。这个固定格式是:URL;jsessionid=xxxxxxxxx
        例如:targetServlet;jsessionid=F9C893D3E77E3E8329FF6BD9B7A09957

     1       //1.获取Session对象
     2        HttpSession session = request.getSession();
     3        
     4       //2.用于对sendRedirect方法后的url地址进行重写,在目标URL地址字符串后面附加JSESSIONID的值
     5          String url = response.encodeRedirectURL(request.getContextPath()+"/servlet/ListCartServlet");
     6        System.out.println(url);
     7        
     8        //3.
     9        url = response.encodeURL(url);
    10        
    11        //4.重定向到目标资源
    12        response.sendRedirect(url); 

    4、Session的活化和钝化
      Session钝化
    :Session在一段时间内没有被使用时,会将当前存在的Session对象序列化到磁盘上,而不再占用内存空间。
      Session活化:Session被钝化后,服务器再次调用Session对象时,将Session对象由磁盘中加载到内存中使用。
      如果希望Session域中的对象也能够随Session钝化过程一起序列化到磁盘上,则对象的实现类也必须实现java.io.Serializable接口。

      不仅如此,如果对象中还包含其他对象的引用,则被关联的对象也必须支持序列化,否则会抛出异常:java.io.NotSerializableException。

  • 相关阅读:
    Spring MVC视图层:thymeleaf vs. JSP
    Guava学习笔记:Google Guava 类库简介
    Hibernate与 MyBatis的比较
    SpringMVC与Struts2区别与比较总结
    Springmvc中@RequestParam传值中文乱码解决方案
    HQL和Criteria
    Struts2的select使用
    Spring AOP原理及拦截器
    hibernate:inverse、cascade,一对多、多对多详解
    mysql中索引利用情况(explain用法)
  • 原文地址:https://www.cnblogs.com/huangdabing/p/9183968.html
Copyright © 2011-2022 走看看