session对象
JSP利用servlet提供的HttpSession接口来识别一个用户,存储这个用户的所有访问信息。
默认情况下,JSP允许会话跟踪,一个新的HttpSession对象将会自动地为新的客户端实例化。禁止会话跟踪需要显式地关掉它,通过将page指令中session属性值设为false来实现,就像下面这样:
1 <%@ page session="false" %>
JSP引擎将隐含的session对象暴露给开发者。由于提供了session对象,开发者就可以方便地存储或检索数据。
下表列出了session对象的一些重要方法:
S.N. | 方法 & 描述 |
---|---|
1 | public Object getAttribute(String name) 返回session对象中与指定名称绑定的对象,如果不存在则返回null |
2 | public Enumeration getAttributeNames() 返回session对象中所有的对象名称 |
3 | public long getCreationTime() 返回session对象被创建的时间, 以毫秒为单位,从1970年1月1号凌晨开始算起 |
4 | public String getId() 返回session对象的ID |
5 | public long getLastAccessedTime() 返回客户端最后访问的时间,以毫秒为单位,从1970年1月1号凌晨开始算起 |
6 | public int getMaxInactiveInterval() 返回最大时间间隔,以秒为单位,servlet 容器将会在这段时间内保持会话打开 |
7 | public void invalidate() 将session无效化,解绑任何与该session绑定的对象 |
8 | public boolean isNew() 返回是否为一个新的客户端,或者客户端是否拒绝加入session |
9 | public void removeAttribute(String name) 移除session中指定名称的对象 |
10 | public void setAttribute(String name, Object value) 使用指定的名称和值来产生一个对象并绑定到session中 |
11 | public void setMaxInactiveInterval(int interval) 用来指定时间,以秒为单位,servlet容器将会在这段时间内保持会话有效 |
JSP Session应用
这个例子描述了如何使用HttpSession对象来获取创建时间和最后一次访问时间。我们将会为request对象关联一个新的session对象,如果这个对象尚未存在的话。
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ page import="java.io.*,java.util.*" %> 4 <% 5 // 获取session创建时间 6 Date createTime = new Date(session.getCreationTime()); 7 // 获取最后访问页面的时间 8 Date lastAccessTime = new Date(session.getLastAccessedTime()); 9 10 String title = "再次访问菜鸟教程实例"; 11 Integer visitCount = new Integer(0); 12 String visitCountKey = new String("visitCount"); 13 String userIDKey = new String("userID"); 14 String userID = new String("ABCD"); 15 16 // 检测网页是否由新的访问用户 17 if (session.isNew()){ 18 title = "访问菜鸟教程实例"; 19 session.setAttribute(userIDKey, userID); 20 session.setAttribute(visitCountKey, visitCount); 21 } else { 22 visitCount = (Integer)session.getAttribute(visitCountKey); 23 visitCount += 1; 24 userID = (String)session.getAttribute(userIDKey); 25 session.setAttribute(visitCountKey, visitCount); 26 } 27 %> 28 <html> 29 <head> 30 <title>Session 跟踪</title> 31 </head> 32 <body> 33 34 <h1>Session 跟踪</h1> 35 36 <table border="1" align="center"> 37 <tr bgcolor="#949494"> 38 <th>Session 信息</th> 39 <th>值</th> 40 </tr> 41 <tr> 42 <td>id</td> 43 <td><% out.print( session.getId()); %></td> 44 </tr> 45 <tr> 46 <td>创建时间</td> 47 <td><% out.print(createTime); %></td> 48 </tr> 49 <tr> 50 <td>最后访问时间</td> 51 <td><% out.print(lastAccessTime); %></td> 52 </tr> 53 <tr> 54 <td>用户 ID</td> 55 <td><% out.print(userID); %></td> 56 </tr> 57 <tr> 58 <td>访问次数</td> 59 <td><% out.print(visitCount); %></td> 60 </tr> 61 </table> 62 </body> 63 </html>
删除Session数据
当处理完一个用户的会话数据后,您可以有如下选择:
- 移除一个特定的属性:
调用public void removeAttribute(String name) 方法来移除指定的属性。
- 删除整个会话:
调用public void invalidate() 方法来使整个session无效。
- 设置会话有效期:
调用 public void setMaxInactiveInterval(int interval) 方法来设置session超时。
- 登出用户:
支持servlet2.4版本的服务器,可以调用 logout()方法来登出用户,并且使所有相关的session无效。
- 配置web.xml文件:
如果使用的是Tomcat,可以向下面这样配置web.xml文件:
<session-config>
<session-timeout>15</session-timeout>
</session-config>
超时以分钟为单位,Tomcat中的默认的超时时间是30分钟。
Servlet中的getMaxInactiveInterval( ) 方法以秒为单位返回超时时间。如果在web.xml中配置的是15分钟,则getMaxInactiveInterval( ) 方法将会返回900。