5.4.2 HttpSession接口中的方法
一个Session就是一个HttpSession对象。实际上,HttpSession是一个接口,在Servlet引擎中实现了这个接口。在HttpSession接口中定义了若干的方法来操作HttpSession对象,这些方法如下:
1. getId方法
getId方法用于返回当前HttpSession对象的SessionID值。要注意的是,SessionID是由系统自动生成的,该值可以唯一标识Web服务器中的Session对象。因此,在HttpSession接口中并未定义setId方法来设置这个SessionID值。
2. getCreationTime方法
getCreationTime方法用于返回当前的HttpSession对象的创建时间,返回的时间是一个自1970年1月1日的0点0分0秒开始计算的毫秒数。
3. getLastAccessedTime方法
getLastAccessedTime方法用于返回当前HttpSession对象的上一次被访问的时间,返回的时间格式是一个自1970年1月1日的0点0分0秒开始计算的毫秒数。
4. setMaxInactiveInterval和getMaxInactiveInterval方法
这两个方法分别用来设置和返回当前HttpSession对象的可空闲的最长时间(单位:秒),这个时间也就是当前会话的有效时间。当某个HttpSession对象在超过这个最长时间后仍然没有被访问,该HttpSession对象就会失效,整个会话过程就会结束。如果有效时间被设置成负数,则表示会话永远不会过期。
5. isNew方法
isNew方法用来判断当前的HttpSession对象是否是新创建的,如果是新创建的,则返回true,否则返回false。 在以下两种情况下,isNew返回true。
(1)在请求消息中不包含SessionID,这时调用getSession方法返回的HttpSession对象一定是新创建的。
(2)在请求消息中包含SessionID,但这个SessionID在服务端没有找到与其匹配的HttpSession对象。发生这种情况的原因可能是HttpSession对象失效或客户端发送了错误的SessionID。
6. invalidate方法
invalidate方法用于强制当前的HttpSession对象失效,这样Web服务器可以立即释放该HttpSession对象。虽然会话在有效时间后会自动释放,但为了减少服务器的HttpSession对象的数量,节省服务端的资源开销,建议在不需要某个HttpSession对象时显式地调用invalidate方法,以尽快释放HttpSession对象。
7. getServletContext方法
getServletContext方法用于返回当前HttpSession对象所属的Web应用程序的ServletContext对象。这个方法和GenericServlet接口的getServletContext方法返回的是同一个ServletContext对象。
8. setAttribute方法
setAttribute方法用于将key-value对保存在Session域中,该方法和HttpRequestServlet接口中的setAttribute方法类似。如果value为null,则从Session域中删除该key-value对。
9. getAttribute方法
getAttribute方法用于返回Session域中指定key的value值。如果Session域中不存在指定的key,则返回null。
10. remoteAttribute方法
remoteAttribute方法用于根据key删除Session域中某一个key-value对。该方法和使用setAttribute方法时value为null的效果相同。在如下两种情况,系统会自动删除Session域中的对象:
(1)当调用invalidate方法使当前HttpSession对象失效后,系统将自动删除保存在当前Session域中的所有对象。
(2)使用setAttribute方法添加一个key-value对,如果key已经存在,并且value和已经存在的key所对应的value不同时,系统会先删除原来的key-value对,再添加新的key-value对。
11. getAttributeNames方法
getAttributeNames方法用于返回一个Enumeration对象,该对象包含了当前Session域中的所有key值。可以通过扫描该Enumeration对象来获得当前Session域中的所以key值,并通过getAttribute方法来获得它们的value值。