【Java.Web】Session —— HttpSession及相关

HttpSession及相关

Session范围是指浏览器与一个Web应用程序进行一次Seesion的过程。在具体的实现上,Session范围与HttpSession对象的生命周期对应。因此,Web组件只要共享同一个HttpSession对象,也就能共享Session范围内的共享数据。


  • HttpSession接口的方法如下,Web应用中的JSP或Servlet组件可通过这些方法来访问Session:

方法 描述
getId() 返回Session ID
invalidate() 销毁当前Session,Servlet容器会释放HttpSession对象占用的资源
setAttribute(String name, Object value) 将一对name/value属性保存在HttpSession对象中
getAttribute(String name) 根据name参数返回保存在HttpSession对象中的属性值
removeAttribute(String name) 从HttpSession对象中删除name参数的指定属性
getAttrubuteNames() 以数组的方式返回HttpSession对象中的所有的属性名
isNew() 判断是否是新创建的Session,如果是新建的会话,返回true
setMaxInactiveInterval(int interval) 设定一个会话可以处于不活动状态的最长时间,以秒为单位。如果超过这个时间,Servlet容器会自动销毁会话。如果把参数internal设置为负数,表示不限制会话处于不活动状态的时间,即会话永远不会过期。

Session的超时时间可以在web.xml中设置
getMaxInactiveInterval() 读取当前会话可以处于不活动状态的时间
getServletContext() 返回会话所属的Web应用的ServletContext对象
   

  • 在以下情况下,会开始一个新的会话,即Servlet容器会创建一个新的HttpSession对象:
    • 一个浏览器进程第一次访问Web应用中的支持Session的任意一个网页
    • 当浏览器进程与Web应用的一次会话已经被销毁后,浏览器进程再次访问Web应用中的支持会话的任意一个网页
    • 当浏览器进程与Web应用的一次会话被销毁后,服务器端的相应HttpSession对象结束生命周期。当浏览器进程再次访问Web应用中的支持Session的任意一个网页时,在它的HTTP请求的Cookie中包含已经被销毁的Session的Session ID,Servlet容器无法找到该Session ID对应的HttpSession对象,在这种情况下,Servlet容器会创建新的HttpSession对象,从而开始新的Session。


  • 在以下情况下,会话被销毁,即Servlet容器使HttpSession对象结束生命周期,并且存放在Session范围内的共享数据也都被销毁:
    • 浏览器进程终止
    • 服务器端执行HttpSession对象的invalidate()方法
    • Session过期
    • Tomcat为Session设定的默认的保持不活动状态的最长时间为1800秒


  • 当Tomcat中的Web应用被终止时,它的会话不会被销毁,而是被Tomcat持久化到永久性存储设备中,当Web应用重启后,Tomcat会重新加载这些会话


  • Session保存在服务器端。为了获得更高的存取速度,服务器一般把Session放在内存里。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。


  • Session在用户第一次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。如果尚未生成Session,也可以使用request.getSession(true)强制生成Session。


  • Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。





你可能感兴趣的:(java,Web)