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

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);
	}
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值