有三种方法来坚持客户端与做事器的会话:

Cookies

网络做事器可以指定一个唯一的session ID作为cookie来代表每个客户端,用来识别这个客户端接下来的要求。

jsp中状态保持有哪几种方式JSP 编程Session HTML

这可能不是一种有效的办法,由于很多时候浏览器并不一定支持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工具的一些主要方法:

S.N.方法 & 描述1public Object getAttribute(String name)返回session工具中与指定名称绑定的工具,如果不存在则返回null2public Enumeration getAttributeNames()返回session工具中所有的工具名称3public long getCreationTime()返回session工具被创建的韶光, 以毫秒为单位,从1970年1月1号凌晨开始算起4public String getId()返回session工具的ID5public long getLastAccessedTime()返回客户端末了访问的韶光,以毫秒为单位,从1970年1月1号凌晨开始算起6public int getMaxInactiveInterval()返回最大韶光间隔,以秒为单位,servlet 容器将会在这段韶光内保持会话打开7public void invalidate()将session无效化,解绑任何与该session绑定的工具8public boolean isNew()返回是否为一个新的客户端,或者客户端是否谢绝加入session9public void removeAttribute(String name)移除session中指定名称的工具10public void setAttribute(String name, Object value) 利用指定的名称和值来产生一个工具并绑定到session中11public void setMaxInactiveInterval(int interval)用来指定时间,以秒为单位,servlet容器将会在这段韶光内保持会话有效

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。