JavaWeb总结(六)—Session
一、Session的介绍
在Web开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的 session中取出该用户的数据,为用户服务。
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否包含了一个session标识(即sessionId),如果已经包含一个sessionId则说明以前已经为此客户创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个,这种情况可能出现在服务端已经删除了该用户对应的session对象,但用户人为地在请求的URL后面附加上一个JSESSION的参数)。如果客户请求不包含sessionId,则为此客户创建一个session并且生成一个与此session相关联的sessionId,这个session id将在本次响应中返回给客户端保存。
二、Session的生命周期
1.Session的创建
一个常见的误解是以为session在有客户端访问时就被创建了,然而事实是直到某Server端程序调用了下列代码是才被创建:
HttpSession session = request.getSession(true);
注意
(1)如果JSP没有显示使用<% page session="false"%>关闭session,则JSP文件在编译成Servlet时会自动加上上面的一句代码,这也是JSP隐含的session对象的来历。
(2)访问.html静态资源因为不会被编译为Servlet,也就不涉及session的问题。
(3)当JSP页面没有显式禁止session时,在打开浏览器第一次请求该JSP时服务器会自动创建一个session,并赋予一个sessionId,发送给客户端浏览器。以后客户端接着请求本应用其他资源时会自动在请求头添加。
2.Session的销毁
(1)直接的调用HttpSession的invlidate()方法,该方法使session失效。
(2)超出HttpSession的过期时间。
第一种设置HttpSession的过期时间。
session.setMaxInactiveInterval(60); //单位为秒
第二种在Tomcat设置HttpSession的过期时间: 单位为分钟。
<session-config> <session-timeout>30</session-timeout> </session-config>
(3)服务器卸载了当前Web应用。