JSP Session会话

HTTP是一种“无状态”协议,这意味着每一个客户端检索网页,客户端打开一个单独的连接到Web服务器,服务器会自动不保留以前的客户端请求的任何记录的时间。

还是有以下三种方式来维护Web客户端和Web服务器之间的会话:

COOKIEs:

一个网络服务器可以分配一个唯一的会话ID作为一个COOKIE给每个Web客户端和从客户端就可以使用接收到的COOKIE确认后续请求。

这可能不是一个有效的方法,因为很多时候浏览器不支持COOKIE,所以我不建议使用这个程序来维护会话。

隐藏表单域:

Web服务器可以与一个唯一的会话ID发送一个隐藏的HTML表单字段,如下所示:

<input type="hidden" name="sessionid" value="12345">

此项目意味着,当表单被提交时,指定名称和值将自动包含在GET或POST数据。当Web浏览器发送请求回每一次,那么session_id的值可以用来保持不同的网页浏览器的跟踪。

这可能是保持会话的轨道,但点击常规(<A HREF...>)超文本链接不会导致表单提交,因此隐藏的表单字段也不能支持一般的会话跟踪的有效途径。

URL重写:

您可以附加上每一个标识会话在URL末尾,一些额外的数据,并且服务器可以是会话标识符与已经存储的有关会话数据关联起来。

例如,http://yiibai.com/file.html;sessiOnid=12345,会话标识符作为附加的sessiOnid=12345可以在web服务器进行访问,以确定客户端。

URL重写是一种更好的方式来维持会话和工程浏览器时,他们不支持COOKIE,但是这里的缺点是,你会动态生成每个URL分配一个会话ID,但网页是简单的静态HTML页面。

session 对象:

除了上面提到的三种方式,JSP利用所提供的servlet HttpSession接口提供了一个方法来识别跨多个页面请求的用户或浏览到一个网站,并存储有关用户的信息。

默认情况下,JSP中有会话跟踪,并启用了新的HttpSession对象被自动实例化每一个新的客户端。禁用会话跟踪需要明确的page指令会话属性设置为false,如下所示将其关闭:

<%@ page session="false" %>

JSP引擎公开HttpSession对象的JSP提交通过隐式会话对象。由于会话对象已经提供给JSP,程序可以立即开始无需任何初始化或getSession()存储和检索的对象数据。

这里是可通过会话对象的重要方法概要:

S.N. 方法 & 描述
1 public Object getAttribute(String name)
This method returns the object bound with the specified name in this session, or null if no object is bound under the name.
2 public Enumeration getAttributeNames()
This method returns an Enumeration of String objects containing the names of all the objects bound to this session.
3 public long getCreationTime()
This method returns the time when this session was created, measured in milliseconds since midnight January 1, 1970 GMT.
4 public String getId()
This method returns a string containing the unique identifier assigned to this session.
5 public long getLastAccessedTime()
This method returns the last time the client sent a request associated with this session, as the number of milliseconds since midnight January 1, 1970 GMT.
6 public int getMaxInactiveInterval()
This method returns the maximum time interval, in seconds, that the servlet container will keep this session open between client accesses.
7 public void invalidate()
This method invalidates this session and unbinds any objects bound to it.
8 public boolean isNew(
This method returns true if the client does not yet know about the session or if the client chooses not to join the session.
9 public void removeAttribute(String name)
This method removes the object bound with the specified name from this session.
10 public void setAttribute(String name, Object value) 
This method binds an object to this session, using the name specified.
11 public void setMaxInactiveInterval(int interval)
This method specifies the time, in seconds, between client requests before the servlet container will invalidate this session.

Session 跟踪例子:

这个例子说明如何使用HttpSession对象,找出创建时间和最后访问时间为一个会话。我们将与请求,如果一个不存在一个新的会话相关联。