会话管理和使用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
会话管理和使用
1、HTTP协议的无状态
HTTP是无状态协议。如果一个协议不能记忆它之前的连接,就不能把某客户端的请求与另一个客户端区分开来,我们就说这个协议是无状态的。
<1.1> 什么是会话
<1.2> 状态和会话管理
2、Servlet API 对会话的支持
在Servlet API中使用HttpSession接口来实现会话,客户端向服务器发请求,服务器就会创建一个与当前请求相关联的会话对象。并使用HttpSession对象封装HTTP会话的重要信息,比如唯一的会话ID以及其他一些特定的客户信息。其中,特定的客户信息可以包含任何java对象。
<2.1> HttpSession接口
HttpSession接口实现了会话机制,并用Session来跟踪客户的状态。
<2.2> 会话对象的创建
在HttpServletRequest接口中定义了两种方式来创建会话,分别是getSession()和getSession(Boolean create)的方法。这两个方法都能返回与当前请求相关联的HttpSession对象。
<2.3> 会话管理
在Web应用中,会话必须很好地被管理,HttpSession接口中提供了管理会话的方法。P45
示例3-1:
package com3_1;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpSession;
public class GetSessionInfoServlet extends
HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException { doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { request.setCharacterEncoding("GBK");
response.setContentType("text/html;charset=GBK"
PrintWriter out = response.getWriter();
//获取与当前请求相关的会话
HttpSession session = request.getSession();
Date creationTime = new
Date(session.getCreationTime());
Date lastAccessed = new
Date(session.getLastAccessedTime());
Date now = new Date();
SimpleDateFormat fmt = new
SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");
out.println("");
out.println("
out.println("
");out.print("
会话创建和最后处理时间
");out.print("现在时间是:" + fmt.format(now) + "
");
out.println("会话创建时间是:" +
fmt.format(creationTime) + "
");
out.println("会话ID是:" + session.getId() + "
");
out.println("会话最大活动期是:" +
session.getMaxInactiveInterval() + "秒
");
out.println("最后处理时间是:" +
fmt.format(lastAccessed));
out.println("
HttpRequest的信息
");out.println("来自请求会话ID:" +
request.getRequestedSessionId() + "
");
out.println("会话来自Cookie吗?:" +
request.isRequestedSessionIdFromCookie() + "
");
out.println("会话是来自URL吗?:" +
request.isRequestedSessionIdFromURL() +"
");
out.println("会话是有效的吗?:" +
request.isRequestedSessionIdValid() + "
");
//销毁会话
session.invalidate();
out.println(" ");
out.println("");
out.flush();
out.close();
}
}
3、会话跟踪
会话跟踪允许服务器确定访问站点的用户、用户访问站点的次数和用户停留站点的时间段。在客户端和服务器之间的会话ID和状态信息交换,Web服务器常有4种方法:
● 使用Servlet API中的Session机制
● 使用Cookic
● 分别是将会话ID存放在URL路劲中、执行URL重写
● 隐藏表单域
<1> 使用Session的会话跟踪
示例3-2:
package com3_2;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class ColorServlet extends HttpServlet {