有三种方法来坚持客户端与做事器的会话:
Cookies
网络做事器可以指定一个唯一的session ID作为cookie来代表每个客户端,用来识别这个客户端接下来的要求。
这可能不是一种有效的办法,由于很多时候浏览器并不一定支持cookie,以是我们不建议利用这种方法来坚持会话。
隐蔽表单域
一个网络做事器可以发送一个隐蔽的HTML表单域和一个唯一的session ID,就像下面这样:
<input type=\公众hidden\公众 name=\公众sessionid\"大众 value=\公众12345\公众>
这个条款意味着,当表单被提交时,指定的名称和值将会自动包含在GET或POST数据中。每当浏览器发送一个要求,session_id的值就可以用来保存不同浏览器的轨迹。
这种办法可能是一种有效的办法,但点击<A HREF>标签中的超链接时不会产生表单提交事宜,因此隐蔽表单域也不支持通用会话跟踪。
重写URL
您可以在每个URL后面添加一些额外的数据来区分会话,做事器能够根据这些数据来关联session标识符。
举例来说,http://w3cschool.cc/file.htm;sessionid=12345, session标识符为sessionid=12345,做事器可以用这个数据来识别客户端。
比较而言,重写URL是更好的办法来,就算浏览器不支持cookies也能事情,但缺陷是您必须为每个URL动态指定session ID,就算这是个大略的HTML页面。
session工具
除了以上几种方法外,JSP利用servlet供应的HttpSession接口来识别一个用户,存储这个用户的所有访问信息。
默认情形下,JSP许可会话跟踪,一个新的HttpSession工具将会自动地为新的客户端实例化。禁止会话跟踪须要显式地关掉它,通过将page指令中session属性值设为false来实现,就像下面这样:
<%@ page session=\"大众false\"大众 %>
JSP引擎将隐含的session工具暴露给开拓者。由于供应了session工具,开拓者就可以方便地存储或检索数据。
下表列出了session工具的一些主要方法:
JSP Session运用
这个例子描述了如何利用HttpSession工具来获取创建韶光和末了一次访问韶光。我们将会为request工具关联一个新的session工具,如果这个工具尚未存在的话。
<%@ page language=\公众java\"大众 contentType=\公众text/html; charset=UTF-8\"大众 pageEncoding=\"大众UTF-8\公众%><%@ page import=\"大众java.io.,java.util.\"大众 %><% // 获取session创建韶光 Date createTime = new Date(session.getCreationTime()); // 获取末了访问页面的韶光 Date lastAccessTime = new Date(session.getLastAccessedTime()); String title = \"大众再次访问菜鸟教程实例\"大众; Integer visitCount = new Integer(0); String visitCountKey = new String(\公众visitCount\"大众); String userIDKey = new String(\公众userID\公众); String userID = new String(\"大众ABCD\公众); // 检测网页是否由新的访问用户 if (session.isNew()){ title = \公众访问菜鸟教程实例\公众; session.setAttribute(userIDKey, userID); session.setAttribute(visitCountKey, visitCount); } else { visitCount = (Integer)session.getAttribute(visitCountKey); visitCount += 1; userID = (String)session.getAttribute(userIDKey); session.setAttribute(visitCountKey, visitCount); }%><html><head><title>Session 跟踪</title></head><body><h1>Session 跟踪</h1><table border=\"大众1\"大众 align=\"大众center\"大众> <tr bgcolor=\"大众#949494\"大众> <th>Session 信息</th> <th>值</th></tr> <tr> <td>id</td> <td><% out.print( session.getId()); %></td></tr> <tr> <td>创建韶光</td> <td><% out.print(createTime); %></td></tr> <tr> <td>末了访问韶光</td> <td><% out.print(lastAccessTime); %></td></tr> <tr> <td>用户 ID</td> <td><% out.print(userID); %></td></tr> <tr> <td>访问次数</td> <td><% out.print(visitCount); %></td></tr> </table> </body></html>
试着访问 http://localhost:8080/testjsp/main.jsp ,第一次运行时将会得到如下结果:
再次访问,将会得到如下结果:
删除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。