欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Cookie和Session-----会话跟踪中的两个重要技术

程序员文章站 2024-03-20 11:59:28
...

Cookie的工作原理:

Cookie是最常用的客户会话跟踪技术。Cookie是将会话数据保存在客户端来维护会话状态的一种方式。它是服务器发送给浏览器的体积很小的纯文本信息,用户以后在访问同一个Web服务器时,浏览器会把Cookie原样发送给服务器。通过这种方式,保存了用户的会话状态。

Cookie分为两类:持久的和暂时的。持久的Cookie会被存储在客户端文件中;暂时的Cookie存储在内存中,一旦浏览器关闭Cookie就消失了。一般来说,客户端浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4kb,因此Cookie不会占用太大的硬盘空间。虽然Cookie很好用而且持久性高,但是由于有些用户担心Cookie对个人隐私有威胁,会关闭Cookie。一旦这样,便无法利用Cookie来达到会话追踪的功能了。下面看看Cookie具体怎么使用:

SetCookies.java(写入)

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;

public class SetCookies extends HttpServlet {
	
	public void doGet(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException {
		
		Cookie c1 = new Cookie("password", "123");
		response.addCookie(c1);
		
		Cookie c2 = new Cookie("client_ip", request.getRemoteAddr());
		
		//设置cookie的生命周期为一个小时,单位为秒
		c2.setMaxAge(60*60);
		response.addCookie(c2);
		
		response.getWriter().println("SetCookies OK!");
	}
}

ShowCookies.java(读取)

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;

public class ShowCookies extends HttpServlet {
	
	public void doGet(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException {
		Cookie[] Cookies = request.getCookies();		
		for (int i=0; i<Cookies.length; i++) {
			Cookie c = Cookies[i];
			response.getWriter().println(c.getName() + ", " + c.getValue());
		}
	}
}

Session的工作原理:

HttpSession对象自动为开发者提供一个可以方便地存储会话信息的地方,HttpSession的会话机制是基于Cookie和URL重写(URL重写就是利用GET方法,在URL的尾部添加一些额外的参数来达到会话追踪的目的)技术,融合了这两种技术的优点。当客户端允许使用Cookie时,HttpSession对象使用Cookie进行会话追踪,如果客户端禁用Cookie,则选择使用URL重写。

session与Cookie一样拥有特定的生命周期。一个session可以利用isNew方法来得知是否为一个新的session。所谓“新”的session就是说,他已经被Server产生,但是Client尚未被告知。

一般来说,session在一段时间内没有起作用就会自动失效,也就是Server会自动控管session失效的时间,不过时间的长短通常因容器而异,也可以自己手动设定session的失效时间。下面看看session具体怎么使用:

SetSessionServlet.java(写入)

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;

public class SetSessionServlet extends HttpServlet {
	
	public void doGet(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException {
		HttpSession session = request.getSession(true);
		session.setAttribute("ip", request.getRemoteAddr());
		
		response.getWriter().println("SetSession OK!");
	}
}

ShowSessionServlet.java(读出)

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;

public class ShowSessionServlet extends HttpServlet {
	
	public void doGet(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException {
		HttpSession session = request.getSession(true);
		String ip = (String)session.getAttribute("ip");
		response.getWriter().println("ip=" + ip);
	}
}

简单的总结了一下,正在学习中... ...