Session对象

Posted kilig

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Session对象相关的知识,希望对你有一定的参考价值。

session:

  * 问题:
    * 一个用户的不同请求处理的数据共享怎么办?
  * 解决:
    * 使用session技术
  * 原理:
    * 用户第一次访问服务器,服务器会创建一个session对象给此用户,并将
    * 该session对象的JSESSIONID使用Cookie技术存储到浏览器中,保证
    * 用户的其他请求能够获取到同一个session对象,也保证了不同请求能够获取到共享的数据
  * 特点:
    * 存储在服务器端
    * 服务器进行创建
    * 依赖Cookie技术
    * 一次会话默认存储时间是30分钟
  * 作用:
    * 解决了一个用户不同请求处理的数据共享问题
  * 使用:
    * 创建session对象/获取session对象
      HttpSession hs=req.getSession();
      如果请求中拥有session的标识符也就是JSESSIONID,则返回其对应的session队形
      如果请求中没有session的标识符也就是JSESSIONID,则创建新的session对象,并将其JSESSIONID作为从cookie数据存储到浏览器内存中
      * 如果session对象是失效了,也会重新创建一个session对象,并将其JSESSIONID存储在浏览器内存中。
    * 设置session存储时间
      * hs.setMaxInactiveInterval(int seconds);
  * 注意:
    * 在指定的时间内session对象没有被使用则销毁,如果使用了则重新计时。
  * 设置session强制失效
    * hs.invalidate();
  * 存储和获取数据
    * 存储:hs.setAttribute(String name,Object value);
    * 获取:hs.getAttribute(String name) 返回的数据类型为Object
  * 注意:
    * 存储的动作和取出的动作发生在不同的请求中,但是存储要先于取出执行。
  * 使用时机:
    * 一般用户在登陆web项目时会将用户的个人信息存储到Sesion中,供该用户的其他请求使用。
  * 总结:
    * session解决了一个用户的不同请求的数据共享问题,只要在JSESSIONID不失效和session对象不失效的情况下。
    * 用户的任意请求在处理时都能获取到同一个session对象。
  * 作用域:
    * 一次会话
    * 在JSESSIONID和SESSION对象不失效的情况下为整个项目内。
  * session失效处理:
    * 将用户请求中的JSESSIONID和后台获取到的SESSION对象的JSESSIONID进行比对,如果一致
    * 则session没有失效,如果不一致则证明session失效了。重定向到登录页面,让用户重新登录。
  * 注意:
    * JSESSIONID存储在了Cookie的临时存储空间中,浏览器关闭即失效。

ServletContext对象:

  * 问题:
    * 不同的用户使用相同的数据
  * 解决:
    * ServletContext对象
  * 特点:
    * 服务器创建
    * 用户共享
  * 作用域:
    * 整个项目内
  * 生命周期:
    * 服务器启动到服务器关闭
  * 使用:
    * 获取ServletContext对象
      * //第一种方式:
        ServletContext sc=this.getServletContext();
       //第二种方式:
        ServletContext sc2=this.getServletConfig().getServletContext();
       //第三种方式:
        ServletContext sc3=req.getSession().getServletContext();
  * 使用ServletContext对象完成数据共享
    * 数据存储
      * sc.setAttribute(String name, Object value);
    * 数据获取
      * sc.getAttribute("str") 返回的是Object类型
  * 注意:
    * 不同的用户可以给ServletContext对象进行数据的存取。
    * 获取的数据不存在返回null。
  * 获取项目中web.xml文件中的全局配置数据
    * sc.getInitParameter(String name); 根据键的名字返回web.xml中配置的全局数据的值,返回String类型。
    * 如果数据不存在返回null。
    * sc.getInitParameterNames();返回键名的枚举
  * 配置方式:注意 一组<context-param>标签只能存储一组键值对数据,多组可以声明多个 <context-param>进行存储。
    * <context-param>
      <param-name>name</param-name>
      <param-value>zhangsan</param-value>
     </context-param>
    *作用:将静态数据和代码进行解耦。
  *获取项目webroot下的资源的绝对路径。
    *String path=sc.getRealPath(String path);
    *获取的路径为项目根目录,path参数为项目根目录中的路径
  *获取webroot下的资源的流对象
    *InputStream is = sc.getResourceAsStream(String path);
  *注意:
    *此种方式只能获取项目根目录下的资源流对象,class文件的流对象需要使用类加载器获取。
    *path参数为项目根目录中的路径

ServletConfig对象:

  * 问题:
    * 如何获取在web.xml中给每个servlet单独配置的数据呢?
  * 解决:
    * 使用ServletConfig对象
  * 使用:
    * 获取ServletConfig对象
    * 获取web.xml中的配置数据

以上是关于Session对象的主要内容,如果未能解决你的问题,请参考以下文章

django session可以存对象吗

Session对象

jsp之session对象

Webform 内置对象 Session对象Application全局对象,ViewState

JAVA-JSP内置对象之session对象设置并获得session生命周期

Session对象