WEB服务器并不会在客户端开始访问它时就创建HttpSession对象,只有客户端访问某个能与客户端开启会话的Servlet程序时,
WEB应用程序才会创建一个与该客户端对应的HttpSession对象。
WEB服务器为HttpSession对象分配一个独一无二的会话标识号,然后在响应消息中将这个会话标识号传递给客户端。
客户端需要记住会话标识号,并在后续的每次访问请求中都把这个会话标识号传送给WEB服务器,
WEB服务器端程序依据回传的会话标识号就知道这次请求是哪个客户端发出的,从而选择与之对应的HttpSession对象。
WEB应用程序创建了与某个客户端对应的HttpSession对象后,只要没有超出一个限定的空闲时间段,HttpSession对象就驻留在WEB服务器内存之中,
该客户端此后访问任意的Servlet程序时,它们都使用与客户端对应的那个已存在的HttpSession对象。
HttpSession接口中专门定义了一个setAttribute方法来将对象存储到HttpSession对象中,还定义了一个getAttribute方法
来检索存储在HttpSession对象中的对象,存储进HttpSession对象中的对象可以被属于同一个会话的各个请求的处理程序共享。
并将与之对应的HttpSession对象变成垃圾。
如果客户端浏览器超时后再次发出访问请求,WEB服务器则认为这是一个新的会话的开始,将为之创建新的HttpSession对象和分配新的会话标识号。
怎样设置session的有效时间呢?
方法一:
会话的超时间隔可以在web.xml文件中设置,其默认值由Servlet容器定义。
<session-config>
<session-timeout>30</session-timeout>以分钟为单位
</session-config>
方法二:
session中也有个方法void setMaxInactiveInterval(int interval)设置有效时间,注意是以秒为单位。
常用方法:
setMaxInactiveInterval(int interval) //设置有效时间,注意是以秒为单位。
getMaxInactiveInterval(int interval) //获取有效时间
setAttribute(String name, Object value)//以一个指定的名称将一个对象添加到session作用域中
getAttribute(String name)//通过制定名称获取作用域中的对象
removeAttribute(String name)//通过制定名称移除作用域中的对象
getAttributeNames()//获取所有的作用域中的对象
session对象的获取:
HttpServletRequest接口中定义了
getSession()方法可直接获得session对象。
在servlet中使用session,直接在doGet或doPost方法使用request.getSession()即可。