手机的网站建设目标谷歌外链代发
Servlet Session 跟踪
Http是一种“无状态”协议,所以需要保存session会话,维持Web服务器连接。
Cookies
一个Web服务器可以分配一个唯一的session会话ID存储至Web客户端的cookie中,对于客户端的后续请求可以使用接收到的cookie来识别。
但是由于部分浏览器不支持cookie,所以需要更换方式维持session会话。
隐藏表单字段
<input type="hidden" name="sessionid" value="12345">
每当Web浏览器发送请求时,session_id值可以用于保持不同的 Web浏览器跟踪。
但单击常规超文本链接不会导致表单提交,因此隐藏的表单字段也不支持常规的session会话跟踪。
URL重写
URL重写即使用Get明文方式保持session会话。
http://llocalhost/index.html?sessionid=12345
其缺点在于,每一次重写URL时,都会分配一个session会话ID,造成系统极大的开销。
HttpSession对象
HttpSession对象是Servlet提供的会话接口,提供了一种跨多个页面请求或访问网站时识别用户以及存储有关用户信息的方式。
获取HttpSession对象
HttpSession session = request.getSession();
HttpSession方法
序号 | 方法 & 描述 |
---|---|
1 | public Object getAttribute(String name) 该方法返回在该 session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回 null。 |
2 | public Enumeration getAttributeNames() 该方法返回 String 对象的枚举,String 对象包含所有绑定到该 session 会话的对象的名称。 |
3 | public long getCreationTime() 该方法返回该 session 会话被创建的时间,自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。 |
4 | public String getId() 该方法返回一个包含分配给该 session 会话的唯一标识符的字符串。 |
5 | public long getLastAccessedTime() 该方法返回客户端最后一次发送与该 session 会话相关的请求的时间自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。 |
6 | public int getMaxInactiveInterval() 该方法返回 Servlet 容器在客户端访问时保持 session 会话打开的最大时间间隔,以秒为单位。 |
7 | public void invalidate() 该方法指示该 session 会话无效,并解除绑定到它上面的任何对象。 |
8 | public boolean isNew( 如果客户端还不知道该 session 会话,或者如果客户选择不参入该 session 会话,则该方法返回 true。 |
9 | public void removeAttribute(String name) 该方法将从该 session 会话移除指定名称的对象。 |
10 | public void setAttribute(String name, Object value) 该方法使用指定的名称绑定一个对象到该 session 会话。 |
11 | public void setMaxInactiveInterval(int interval) 该方法在 Servlet 容器指示该 session 会话无效之前,指定客户端请求之间的时间,以秒为单位。 |
HttpSession实例
public class SessionTrack extends HttpServlet{public void doGet(HttpSevletRequest request,HttpServletResponse response) throws ServletException,IOException{//获取session对象,若不存在session会话,则创建一个session对象HttpSession session = request.getSession(true);//获取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);} else {visitCount = (Integer)session.getAttribute(visitCountKey);visitCount = visitCount + 1;userID = (String)session.getAttribute(userIDKey);}session.setAttribute(visitCountKey, visitCount);// 设置响应内容类型response.setContentType("text/html");PrintWriter out = response.getWriter();String docType ="<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";out.println(docType +"<html>\n" +"<head><title>" + title + "</title></head>\n" +"<body bgcolor=\"#f0f0f0\">\n" +"<h1 align=\"center\">" + title + "</h1>\n" +"<h2 align=\"center\">Session 信息</h2>\n" +"<table border=\"1\" align=\"center\">\n" +"<tr bgcolor=\"#949494\">\n" +" <th>Session 信息</th><th>值</th></tr>\n" +"<tr>\n" +" <td>id</td>\n" +" <td>" + session.getId() + "</td></tr>\n" +"<tr>\n" +" <td>Creation Time</td>\n" +" <td>" + createTime + " </td></tr>\n" +"<tr>\n" +" <td>Time of Last Access</td>\n" +" <td>" + lastAccessTime + " </td></tr>\n" +"<tr>\n" +" <td>User ID</td>\n" +" <td>" + userID + " </td></tr>\n" +"<tr>\n" +" <td>Number of visits</td>\n" +" <td>" + visitCount + "</td></tr>\n" +"</table>\n" +"</body></html>");}
}
删除Session会话数据
以下有几种删除会话的选择:
- 删除特定属性
public void removeAttribute(String name) //name为key值
- 删除整个会话
public void invalidate()
- 设置会话过期时间
public void setMaxInactiveInterval(int interval) //interval超时时间
-
注销用户
调用logout注销Web服务器的客户端,并把属于所有用户的所有session会话设置为无效。 -
web.xml配置
<session-config><session-timeout>15</session-timeout> <!-- 以分钟为单位,默认为30分钟 -->
</session-config>