您的位置:首页 > 理论基础 > 计算机网络

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

2014-10-07 03:52 232 查看

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)”了一次。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: