基于Cookies的会话跟踪技术

会话跟踪:

Java Servlet API使用Session来跟踪会话和管理会话内的状态通过在每一个请求和响应中包含SessionID,服务器就可将用户分开。

在Servlet规范中,有三种机制用于会话跟踪:

1、SSL(secure socket layer)会话

2、Cookies

3、URL重写

1、Cookies:

Cookies是一种由服务器发给客户的片段信息,存储在客户端浏览器的内存中或硬盘上,在客户对服务器的请求中发送它。

Cookies以键-值对的方式记录会话跟踪的内容,服务器利用响应报头Set-Cookie来发送Cookie信息。在JavaServletAPI中,提供了javax.servlet.http.Cookie类,用于创建Cookie。

基于Cookies的会话跟踪:

在JavaServletAPI,javax.servlet.http.HttpSession接口封装了Session的概念,Servlet容器提供这个接口的实现。

当请求一个会话的时候,Servlet容器就创建一个HttpSession对象,并为该对象分配一个唯一的Session ID,将其作为Cookie发送给浏览器,浏览器在内存中保存这个Cookie。

2、基于URL重写的会话跟踪:

当客户端不接受Cookie的时候,可以使用URL重写的机制来跟踪用户的会话。URL重写就是在URL中附加标识客户的SessionID,Servlet容器解释URL,取出SessionID,根据它将请求与特定的Session关联。SessionID被编码为URL字符串中的路径参数,这个参数的名字必须是jsessionid。

服务器将SessionID作为URL的一部分发给客户端,客户端在请求URL中再传回来。

服务器将所有发往客户端的URL进行编码,可以通过HttpServletResponse接口中的encodeURL方法和encodeRedirectURL方法实现。

3、SSL(secure socket layer 安全套接字层):

SSL(secure socket layer 安全套接字层)是一种运行在TCP/IP之上像HTTP这种应用层协议之下的加密技术。SSL是在HTTPS协议中使用的加密技术。SSL可以让采用SSL的服务器认证采用SSL客户端,并却在客户端和服务器之间保持一种加密的联系。在建立了加密连接的过程中,客户和服务器都可以产生名叫“会话密钥”的东西,它是一种用于加密和解密消息的对称密钥。基于HTTPS协议的服务器可以使用这个客户端的对称密钥来建立会话。


基于cookies的会话跟踪的java代码:

SetCookies.java:

public class SetCookies extends HttpServlet { 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 向客户端写入Cookie,共6个
        for(int i = 0; i < 3; i++) {
            // 3个没有设置时间的Cookie,属于本窗口及其子窗口
            Cookie cookie = new Cookie("Session-Cookie-" + i, "Cookie-Value-S" + i);
            response.addCookie(cookie);
            // 以下3个Cookie设置了时间(3600秒,1小时),属于文本,别的窗口也可以访问到这些Cookie
            cookie = new Cookie("Persistent-Cookie-" + i, "Cookie-Value-P" + i);
            cookie.setMaxAge(3600);
            response.addCookie(cookie);
        }
        
        response.setContentType("text/html;charset=gb2312");
        PrintWriter out = response.getWriter();
        String title = "Setting Cookies";
        out.println("设置Cookie"
                + "" + title + "
" + "There are six cookies associates with this page.
" + "to see them,visit the " + "ShowCookies servlet" + ""); } }

ShowCookies:

public class ShowCookies extends HttpServlet { 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        response.setContentType("text/html;charset=gb2312");
        PrintWriter pw = response.getWriter();
        String title = "Active Cookies";
        pw.println("init");
        pw.println("读取客户端"
                + title
                + "\n" + "\n"
                + "\n" + "\n"
                        + "\n");
            }
        }
        pw.println("
Cookie NameCookie Value" + "
"); // 读取客户端的所有Cookie Cookie[] cookies = request.getCookies(); if(cookies != null) { Cookie cookie; for(int i = 0; i < cookies.length; i++) { cookie = cookies[i]; pw.println("
" + cookie.getName() +"" + cookie.getValue() +"
\n"); } }
配置web.xml


	
	SetCookies
	
	SetCookies




	
	SetCookies
	
	/SetCookies




	
	ShowCookies
	
	ShowCookies




	
	ShowCookies
	
	/ShowCookies











你可能感兴趣的:(Servlet,Servlet知识)