Cookie

Cookie机制详解

cookie机制采用的是在客户端保持 HTTP 状态信息的方案 。

Cookie是在浏览器访问WEB服务器的某个资源时,由WEB服务器在HTTP响应消息头中附带传送给浏览器的一个小文本文件。

一旦WEB浏览器保存了某个Cookie,那么它在以后每次访问该WEB服务器时,都会在HTTP请求头中将这个Cookie回传给WEB服务器。

底层的实现原理: WEB服务器通过在HTTP响应消息中增加Set-Cookie响应头字段将Cookie信息发送给浏览器,浏览器则通过在HTTP请求消息中增加Cookie请求头字段将Cookie回传给WEB服务器。

Servlet API中提供了一个javax.servlet.http.Cookie类来封装Cookie信息,它包含有生成Cookie信息和提取Cookie信息的各个属性的方法。

Cookie类的方法:

构造方法: public Cookie(String name,String value)

getName方法

setValuegetValue方法

setMaxAgegetMaxAge方法

setPathgetPath方法

Cookie的发送

1.创建Cookie对象

2.设置最大时效

3.Cookie放入到HTTP响应报头

如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie; 存储在浏览器的内存中,用户退出浏览器之后被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie

发送cookie需要使用HttpServletResponseaddCookie方法,将cookie插入到一个 Set-Cookie HTTP响应报头中。这个方法并不修改任何之前指定的Set-Cookie报头,而是创建新的报头。

会话cookie和持久cookie的区别

如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览器会话期的cookie被称为会话cookie会话cookie一般不保存在硬盘上而是保存在内存里

如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。

存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。

在Servlet程序中使用Cookie

HttpServletResponse接口中定义了一个addCookie方法,它用于在发送给浏览器的HTTP响应消息中增加一个Set-Cookie响应头字段。

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//获取cookie
	    Cookie[] cookies=request.getCookies();
	    if(cookies!=null&&cookies.length>0){
	    	for(Cookie c:cookies){
	    		//获取cookie名
	    		String name=c.getName();
	    		//获取cookie值
	    		String value=c.getValue();
	    		System.out.println(name+":"+value);
	    	}
	    }else{
		//创建cookie
		Cookie cookie=new Cookie("name", "zhangsan");
		
		//设置cookie过期时间
		//默认值为-1,即只保存到浏览器的缓存中,不保存到文件中,即浏览器关闭则会删除cookie
		cookie.setMaxAge(20);//以秒为单位
		//将创建好的cookie响应给客户端浏览器
		response.addCookie(cookie);
	    }
	}

Cookie实现跟踪用户上次访问站点的时间

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out=response.getWriter();
		String msg="第一次访问";
		//1.获取当前系统时间
		Date date=new Date();
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		String strDate=sdf.format(date);
		//2.创建cookie
		Cookie cookie=new Cookie("lastDate", strDate);
		//3.设置cookie过期时间为1年
		cookie.setMaxAge(60*60*24*365);
		
		//4.将cookie响应给浏览器
		response.addCookie(cookie);
		
		//5.获取浏览器发送过来的cookie,得到具体时间
		Cookie[] cookies=request.getCookies();
		//6.判断是否有cookie
		if(cookies!=null && cookies.length>0){
			for(Cookie c:cookies){
			  if("lastDate".equals(c.getName())){
				  msg="长次访问时间:"+c.getValue();
			  }
			}
		}
		out.write(msg);
	}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值