会话管理和使用

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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(" 显示会话的信息</p><p>");

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 {

相关文档
最新文档