`
lushuaiyin
  • 浏览: 693541 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

cookie的操作

 
阅读更多

学习操作cookie,首先要了解cookie的机制。这个网上优秀的文章太多了。

本篇文章练习如何操作cookie。

说道操作,无非就是“增删改查”四个字。

cookie操作的api很简单,马上先写一个看看。

一,新增cookie

package org.hd.report.action;

import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import org.rd.framework.struts.action.CommonAction;

import com.opensymphony.xwork2.ActionContext;

//
public class CookieAction  extends CommonAction{
	
	public String showcookie() throws Exception{
		
		ActionContext ctx = ActionContext.getContext();
		HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); 
		HttpServletRequest request  = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); 
		response.setCharacterEncoding("UTF-8");
		PrintWriter out = response.getWriter();
		

		Cookie[] cookies = request.getCookies();//这样便可以获取一个cookie数组

		for(Cookie cookie : cookies){
//		    cookie.getName();// get the cookie name
//		    cookie.getValue(); // get the cookie value
		    System.out.println("cookie;----名字:"+cookie.getName()+"---值:"+cookie.getValue()+"---路径:"+cookie.getPath());
		}
		Date dd=new Date();
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Cookie ck = new Cookie("cookie-name-lsy",sdf.format(dd));
		ck.setComment("this is the comment from lsy ");
//		ck.setDomain("lsydoman");
		ck.setMaxAge(360);
		ck.setPath("/haha");
//		ck.setVersion(1);
		System.out.println("服务端设置cookie:"+ck.toString());
		
		response.addCookie(ck);
		
		//out.println(ck.toString());
		return SUCCESS;
	}
	
	public String execute() throws Exception{
		return SUCCESS;
	}
	
}

在cookie的路径下(也是浏览器临时文件的路径,浏览器中的InterNet选项中,浏览历史记录--设置--当前位置)

打开这个文件内容如下:

cookie-name-lsy
"2012-11-26 17:38:24"
helpdesk.citicsinfo.com/haha
1536
2652032000
30264250
3356876643
30264249
*

---------------------------------------------------------------------------------------------------------------

尝试着修改某些属性值,看看效果:
ck.setPath("/wawa.txt");
得到wawa.txt文件

cookie-name-lsy
"2012-11-26 17:39:15"
helpdesk.citicsinfo.com/wawa.txt
1536
3162032000
30264250
3857085253
30264249
*

---------------------------------------------------------------------------------------------------------------
修改值:
ck.setDomain("helpdesk.citicsinfo.com");
ck.setPath("/dom");
结果出现dom文件

cookie-name-lsy
"2012-11-26 17:40:38"
helpdesk.citicsinfo.com/dom
1536
3992032000
30264250
397875759
30264250
*
---------------------------------------------------------------------------------------------------------------


修改值:
ck.setDomain("xxxxxx");
ck.setPath("/dom2");
结果没有生成cookie文件!

---------------------------------------------------------------------------------------------------------------

修改值:
ck.setDomain("helpdesk.citicsinfo.com");
ck.setPath("/lsy/kk");
结果出现kk文件
(没有出现我预期的先生成lsy文件夹然后再次文件夹下再生成kk,而是直接生成了kk!
但是cookie里面的域名改变了helpdesk.citicsinfo.com/lsy/kk)


cookie-name-lsy
"2012-11-26 18:00:24"
helpdesk.citicsinfo.com/lsy/kk
1536
2967130112
30264253
3668059527
30264252
*

---------------------------------------------------------------------------------------------------------------


在服务端每次都会遍历打印cookie,为了测试数据的准确,我每次都是先把
cookie目录下的东西先删除再做测试的,但是每次都会有一个JSESSIONID出现。
如下:
cookie;----名字:JSESSIONID---值:6B2B5B9F6123D2B156256AB3BE2C849C---路径:null
它的路径是null。
为什么每次都有这个cookie呢?网上搜了一下:
原来是tomcat服务器创建session的cookie。
session的创建需要cookie支持的,看到这里也许明白了,为什么浏览器能识别
服务器的session,原来是服务器在客户端会先创建cookie,把sessionId保存起来,
党浏览器关闭时这个cookie就消失,这样就是session的基本原理。

网上一段文摘:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
所谓session可以这样理解:当与服务端进行会话时,比如说登陆成功后,服务端会为用户开壁一块内存区间,
用以存放用户这次会话的一些内容,比如说用户名之类的。那么就需要一个东西来标志这个内存区间是你的而不是别人的,
这个东西就是session id(jsessionid只是tomcat中对session id的叫法,在其它容器里面,不一定就是叫jsessionid了。),
而这个内存区间你可以理解为session。
然后,服务器会将这个session id发回给你的浏览器,放入你的浏览器的cookies中(这个cookies是内存cookies,
跟一般的不一样,它会随着浏览器的关闭而消失)。
之后,只有你浏览器没有关闭,你每向服务器发请求,服务器就会从你发送过来的cookies中拿出这个session id,
然后根据这个session id到相应的内存中取你之前存放的数据。
但是,如果你退出登陆了,服务器会清掉属于你的内存区域,所以你再登的话,会产生一个新的session了。

这是一个保险措施 因为Session默认是需要Cookie支持的,但有些客户浏览器是关闭Cookie的【而jsessionid是存储在Cookie中的,
如果禁用Cookie的话,也就是说服务器那边得不到jsessionid,这样也就没法根据jsessionid获得对应的session了,获得不了session就
得不到session中存储的数据了。】这个时候就需要在URL中指定服务器上的session标识,也
就是类似于“jsessionid=5F4771183629C9834F8382E23BE13C4C”
这种格式。用一个方法(忘了方法的名字)处理URL串就可以得到
这个东西,这个方法会判断你的浏览器是否开启了Cookie,如果他认为应该加他就会加上去。
session是有一定作用域的,而且是有时间限制的。
jsessionid是服务器那边生成的,因为cookie是服务器那边送到客户端的信息。
不管能不能修改jsessionid,都不应该修改,如果你修改了,这就失去了jessionid的自身意义了,
你修改的话,你让服务器那边如何找到对应的session?找不到的话,你存放在那个session中的数据不是取不到了吗?


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

操作cookie很简单,常用的方法也就那么几个:
getDomain();返回cookie的域名.   
getMaxAge();返回cookie的存活时间   
getName();返回cookie的名字   
getPath();返回cookie适用的路径   
getSecure();如果浏览器通过安全协议发送Cookie将返回true值,如果浏览器使用标准协议刚返回false值   
getValue();返回cookie的值   
getVersion();返回cookie所遵从的协议版本

setComment(String purpose);设置cookie的注释   
setPath(String url);设置Cookie的适用路径   
setSecure(Boolean flag);设置浏览器是否仅仅使用安全协议来发送cookie,例如使用Https或ssl   
setValue(String newvalue);cookie创建后设置一个新的值   
setVersion(int v);设置cookie所遵从的协议版本.
setDomain(String ss) 设置域.
setMaxAge(int time) 设置失效时间,秒。参数为负数代表关闭浏览器时清除cookie,参数为0时代表删除cookie,参数为正数时代表cookie存在多少秒

Cookie版本:
目前有两个版本:
版本0 : 由Netscape公司制定的,也被几乎所有的浏览器支持. Java中为了保持兼容性, 目前只支持到版本0,
Cookie的内容中不能空格,方括号,圆括号,等于号(=),逗号,双引号,斜杠,问号,@符号,冒号,分号。
版本1 : 根据RFC 2109文档制定的. 放宽了很多限制.
上面所限制的字符都可以使用. 但为了保持兼容性, 应该尽量避免使用这些特殊字符.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

继续修改在value中写入中文,则报错:


严重: Servlet.service() for servlet default threw exception
java.lang.IllegalArgumentException: Control character in cookie value, consider BASE64 encoding your value

因为中文的原因,导致这样的报错。解决如下:

///////////////////////////////////////////
Date dd=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String zhvalue1= java.net.URLEncoder.encode("时间:"+sdf.format(dd),"utf-8");
Cookie ck = new Cookie("cookie-name-lsy",zhvalue1);

String zhvalue2 = java.net.URLEncoder.encode("this is the comment from lsy 你好 xxxxxx","utf-8");
ck.setComment(zhvalue2);
ck.setDomain("helpdesk.citicsinfo.com");//helpdesk.citicsinfo.com
ck.setMaxAge(360);
ck.setPath("/chinese1");
//ck.setVersion(1);
System.out.println("服务端设置cookie:"+ck.toString());

response.addCookie(ck);


使用java.net.URLEncoder后,如上
出现chinese1文件,内容:

cookie-name-lsy
%E6%97%B6%E9%97%B4%EF%BC%9A2012-11-27+09%3A28%3A37
helpdesk.citicsinfo.com/chinese1
1536
1551381632
30264383
2251867240
30264382
*

二,读取cookie

把代码修改如下:


import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import org.rd.framework.struts.action.CommonAction;

import com.opensymphony.xwork2.ActionContext;

//
public class CookieAction  extends CommonAction{
	
	public String addcookie() throws Exception{
		
		ActionContext ctx = ActionContext.getContext();
		HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); 
		HttpServletRequest request  = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); 
		response.setCharacterEncoding("UTF-8");
		PrintWriter out = response.getWriter();
		
		///////////////////////////////////////////
		Date dd=new Date();
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String zhvalue1= java.net.URLEncoder.encode("时间:"+sdf.format(dd),"utf-8");
		Cookie ck = new Cookie("cookie-name-lsy",zhvalue1);
		
		String zhvalue2 = java.net.URLEncoder.encode("this is the comment from lsy 你好 xxxxxx","utf-8");
		ck.setComment(zhvalue2);
//		ck.setDomain("helpdesk.citicsinfo.com");//helpdesk.citicsinfo.com
		ck.setMaxAge(3600);
		ck.setPath("/chinese12");
//		ck.setPath("/");
		
//		ck.setVersion(1);
		System.out.println("服务端设置cookie:"+ck.toString());
		
		response.addCookie(ck);
		
		return SUCCESS;
	}
	
public String showcookie() throws Exception{
		
		ActionContext ctx = ActionContext.getContext();
		HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); 
		HttpServletRequest request  = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); 
		response.setCharacterEncoding("UTF-8");
		PrintWriter out = response.getWriter();
		
		System.out.println("request.getContextPath:"+request.getContextPath());
		Cookie[] cookies = request.getCookies();//这样便可以获取一个cookie数组
		for(Cookie cookie : cookies){
		    System.out.println("cookie----名字:"+cookie.getName());
		    System.out.println("值:"+cookie.getValue());
		    System.out.println("路径:"+cookie.getPath());
		    System.out.println("失效时间:"+cookie.getMaxAge()+"秒");
		    System.out.println("注释:"+cookie.getComment());
		    System.out.println("版本:"+cookie.getVersion()+"。安全:"+cookie.getSecure()+"。域名:"+cookie.getDomain());
		    System.out.println("---------------------------------------------------------------------------------------");
		}
		
		return SUCCESS;
	}
	
	public String execute() throws Exception{
		return SUCCESS;
	}
	
}



现在我把添加cookie的代码和显示cookie的代码分开,这样逻辑更加清楚。
会了怎么添加cookie,下面当然是怎么读取,修改,删除cookie。
增删改查都会了此算是“会操作”

操作步骤:
先把cookie临时目录下的东西清空(路径到这里查看:浏览器中的InterNet选项中,浏览历史记录--设置--当前位置)
然后发一个请求添加一个cookie,到这个目录下看看(记得要右键刷新才能显示出来),
这时有了cookie我文件chinese12。
然后发请求读取所有cookie,从打印结果看,我只取到了回话cookie,即jsessionId。
我添加的cookie没有读取出来。
查了一下原因,是因为路径的原因,就是ck.setPath("/chinese12");
这样生成的文件名就是chinese12,但是读取的时候request.getCookies();
这行代码是默认路径,在读取时怎么读取指定的路径呢?网上我也没查到。
所以只好把添加的cookie路径改成默认的。即ck.setPath("/");

生成的cookie文件名是:cookie:lushuaiyin@helpdesk.citics.com/
可见这种默认的明明方式是: cookie:系统用户名@工程域名

cookie-name-lsy
%E6%97%B6%E9%97%B4%EF%BC%9A2012-11-27+11%3A28%3A05
helpdesk.citicsinfo.com/
1536
2552166528
30264407
912453727
30264399
*

后台打印:

服务端设置cookie:javax.servlet.http.Cookie@9f1ca0
request.getContextPath:
cookie----名字:JSESSIONID
值:CD62C08FC2C9312F51E724C77CDD9850
路径:null
失效时间:-1秒
注释:null
版本:0。安全:false。域名:null
---------------------------------------------------------------------------------------
cookie----名字:cookie-name-lsy
值:%E6%97%B6%E9%97%B4%EF%BC%9A2012-11-27+11%3A28%3A05
路径:null
失效时间:-1秒
注释:null
版本:0。安全:false。域名:null
---------------------------------------------------------------------------------------
修改读取时要对中文解码:

Cookie[] cookies = request.getCookies();//这样便可以获取一个cookie数组
for(Cookie cookie : cookies){
String zhname=cookie.getName()!=null?java.net.URLDecoder.decode(cookie.getName(), "utf-8"):cookie.getName();
System.out.println("cookie----名字:"+zhname );

String zhvalue=cookie.getValue()!=null?java.net.URLDecoder.decode(cookie.getValue(), "utf-8"):cookie.getValue();
System.out.println("值:"+zhvalue);

String zhpath=cookie.getPath()!=null?java.net.URLDecoder.decode(cookie.getPath(), "utf-8"):cookie.getPath();
System.out.println("路径:"+zhpath);

System.out.println("失效时间:"+cookie.getMaxAge()+"秒");

String zhcomment=cookie.getComment()!=null?java.net.URLDecoder.decode(cookie.getComment(), "utf-8"):cookie.getComment();
System.out.println("注释:"+zhcomment);

System.out.println("版本:"+cookie.getVersion()+"。安全:"+cookie.getSecure()+"。域名:"+cookie.getDomain());
System.out.println("---------------------------------------------------------------------------------------");
}


打印:
request.getContextPath:
cookie----名字:JSESSIONID
值:CD62C08FC2C9312F51E724C77CDD9850
路径:null
失效时间:-1秒
注释:null
版本:0。安全:false。域名:null
---------------------------------------------------------------------------------------
cookie----名字:cookie-name-lsy
值:时间:2012-11-27 11:52:09
路径:null
失效时间:-1秒
注释:null
版本:0。安全:false。域名:null
---------------------------------------------------------------------------------------

从打印页可以看出中文已经能正常显示了,
JSESSIONID的失效时间是-1,就是在浏览器关闭的时候会清除这个sessionId.
奇怪的是我的cookie的路径,注释,域名都是null,这个很费解啊。
网上搜了半天,好像就我碰到了,别人就没遇见过这问题吗?

暂时放一边吧,有键值对就能实现功能了。

三,删除cookie

增加一个方法;

public String delcookie() throws Exception{
	
	ActionContext ctx = ActionContext.getContext();
	HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); 
	HttpServletRequest request  = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); 
	response.setCharacterEncoding("UTF-8");
	PrintWriter out = response.getWriter();
	
	Cookie[] cookies = null;//这样便可以获取一个cookie数组
	if(request.getCookies()!=null){
		cookies=request.getCookies();
		
		for(Cookie cookie : cookies){
			String zhname=cookie.getName()!=null?java.net.URLDecoder.decode(cookie.getName(), "utf-8"):cookie.getName();
		    System.out.println("cookie----名字:"+zhname );
		    
		    String zhvalue=cookie.getValue()!=null?java.net.URLDecoder.decode(cookie.getValue(), "utf-8"):cookie.getValue();
		    System.out.println("值:"+zhvalue);
		    
		    String zhpath=cookie.getPath()!=null?java.net.URLDecoder.decode(cookie.getPath(), "utf-8"):cookie.getPath();
		    System.out.println("路径:"+zhpath);
		    
		    System.out.println("失效时间:"+cookie.getMaxAge()+"秒");
		    
		    String zhcomment=cookie.getComment()!=null?java.net.URLDecoder.decode(cookie.getComment(), "utf-8"):cookie.getComment();
		    System.out.println("注释:"+zhcomment);
		    
		    System.out.println("版本:"+cookie.getVersion()+"。安全:"+cookie.getSecure()+"。域名:"+cookie.getDomain());
		    //删除
		    if(zhname.trim().equals("cookie-name-lsy")){
		    	//从上面打印的数据看,路径是null,注释,域也是null。
		    	//而卧添加cookie的时候确实是有注释内容的,在删除时也遇到了问题,
		    	//就是如果路径是null据删除不了,这个已经做过测试了。
		    	//删除时必须重新设置path,这样才能正常删除!
		    	cookie.setPath("/");//必须设置路径!如果是其他路径,也要相应的设置。
		    	cookie.setMaxAge(0);//删除时设置为0
		    	System.out.println("----cookie-name-lsy已删除--------------");
		    	response.addCookie(cookie);
		    }
		    System.out.println("---------------------------------------------------------------------------------------");
		}
	}
	
	return SUCCESS;
}

打印:

cookie----名字:cookie-name-lsy
值:时间:2012-11-27 14:46:44
路径:null
失效时间:-1秒
注释:null
版本:0。安全:false。域名:null
----cookie-name-lsy已删除--------------
---------------------------------------------------------------------------------------
//从上面打印的数据看,路径是null,注释,域也是null。
//而我添加cookie的时候确实是有注释内容的,在删除时也遇到了问题,
//就是如果路径是null据删除不了,这个已经做过测试了。
//删除时必须重新设置path,这样才能正常删除!
cookie.setPath("/");//必须设置路径!如果是其他路径,也要相应的设置。
cookie.setMaxAge(0);//删除时设置为0

四,修改cookie

增加方法

public String editcookie() throws Exception{

ActionContext ctx = ActionContext.getContext();
HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE);
HttpServletRequest request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST);
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();

Cookie[] cookies = null;//这样便可以获取一个cookie数组
if(request.getCookies()!=null){
cookies=request.getCookies();

for(Cookie cookie : cookies){
String zhname=cookie.getName()!=null?java.net.URLDecoder.decode(cookie.getName(), "utf-8"):cookie.getName();
System.out.println("cookie----名字:"+zhname );

String zhvalue=cookie.getValue()!=null?java.net.URLDecoder.decode(cookie.getValue(), "utf-8"):cookie.getValue();
System.out.println("值:"+zhvalue);

String zhpath=cookie.getPath()!=null?java.net.URLDecoder.decode(cookie.getPath(), "utf-8"):cookie.getPath();
System.out.println("路径:"+zhpath);

System.out.println("失效时间:"+cookie.getMaxAge()+"秒");

String zhcomment=cookie.getComment()!=null?java.net.URLDecoder.decode(cookie.getComment(), "utf-8"):cookie.getComment();
System.out.println("注释:"+zhcomment);

System.out.println("版本:"+cookie.getVersion()+"。安全:"+cookie.getSecure()+"。域名:"+cookie.getDomain());
//删除
if(zhname.trim().equals("cookie-name-lsy")){
//从上面打印的数据看,路径是null,注释,域也是null。
//而我添加cookie的时候确实是有注释内容的
//修改和删除也一样,必须设置路径path,不然浏览器找不到这个cookie
cookie.setPath("/");//必须设置路径!如果是其他路径,也要相应的设置。
cookie.setValue("editvalue");
System.out.println("----cookie-name-lsy已经成功修改--------------");
response.addCookie(cookie);
}
System.out.println("---------------------------------------------------------------------------------------");
}
}

return SUCCESS;
}

操作步骤;
先清空浏览器临时文件(也是cookie的目录);
添加一个cookie,查询遍历打印出所有cookie的信息,在目录下右键刷新,看cookie是否存在;
发送修改cookie的请求,然后再查询遍历所有cookie信息。
这时发现cookie的内容已经改变了。


把上面几个方法也优化一下,整个action的完整代码如下:

package org.hd.report.action;

import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import org.rd.framework.struts.action.CommonAction;

import com.opensymphony.xwork2.ActionContext;

//
public class CookieAction  extends CommonAction{
	
	public String addcookie() throws Exception{
		
		ActionContext ctx = ActionContext.getContext();
		HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); 
		HttpServletRequest request  = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); 
		response.setCharacterEncoding("UTF-8");
		PrintWriter out = response.getWriter();
		
		///////////////////////////////////////////
		Date dd=new Date();
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String zhvalue1= java.net.URLEncoder.encode("时间:"+sdf.format(dd),"utf-8");
		Cookie ck = new Cookie("cookie-name-lsy",zhvalue1);
		
		String zhvalue2 = java.net.URLEncoder.encode("thisisthecommentfromlsyxxxxx","utf-8");
		ck.setComment(zhvalue2);
//		ck.setDomain("helpdesk.citicsinfo.com");//helpdesk.citicsinfo.com
		ck.setMaxAge(3600);
//		ck.setPath("/chinese12");
		ck.setPath("/");//设置这个默认路径,在读取时才能正常读取
		
//		ck.setVersion(1);
		System.out.println("服务端设置cookie:"+ck.toString());
		
		response.addCookie(ck);
		
		return SUCCESS;
	}
	
public String showcookie() throws Exception{
		
		ActionContext ctx = ActionContext.getContext();
		HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); 
		HttpServletRequest request  = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); 
		response.setCharacterEncoding("UTF-8");
		PrintWriter out = response.getWriter();
		
		System.out.println("request.getContextPath:"+request.getContextPath());
		Cookie[] cookies = null;//这样便可以获取一个cookie数组
		if(request.getCookies()!=null){
			cookies=request.getCookies();
			System.out.println("-----------------遍历cookie  start------------------------------------" );
			for(Cookie cookie : cookies){
				String zhname=cookie.getName()!=null?java.net.URLDecoder.decode(cookie.getName(), "utf-8"):cookie.getName();
			    System.out.println("cookie----名字:"+zhname );
			    
			    String zhvalue=cookie.getValue()!=null?java.net.URLDecoder.decode(cookie.getValue(), "utf-8"):cookie.getValue();
			    System.out.println("值:"+zhvalue);
			    
			    String zhpath=cookie.getPath()!=null?java.net.URLDecoder.decode(cookie.getPath(), "utf-8"):cookie.getPath();
			    System.out.println("路径:"+zhpath);
			    
			    System.out.println("失效时间:"+cookie.getMaxAge()+"秒");
			    
			    String zhcomment=cookie.getComment()!=null?java.net.URLDecoder.decode(cookie.getComment(), "utf-8"):cookie.getComment();
			    System.out.println("注释:"+zhcomment);
			    
			    System.out.println("版本:"+cookie.getVersion()+"。安全:"+cookie.getSecure()+"。域名:"+cookie.getDomain());
			    System.out.println("---------------------------------------------------------------------------------------");
			}
			
			System.out.println("-----------------遍历cookie  end------------------------------------" );
		}
		
		return SUCCESS;
	}

public String delcookie() throws Exception{
	
	ActionContext ctx = ActionContext.getContext();
	HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); 
	HttpServletRequest request  = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); 
	response.setCharacterEncoding("UTF-8");
	PrintWriter out = response.getWriter();
	
	Cookie[] cookies = null;//这样便可以获取一个cookie数组
	if(request.getCookies()!=null){
		cookies=request.getCookies();
		
	    
		for(Cookie cookie : cookies){
			String zhname=cookie.getName()!=null?java.net.URLDecoder.decode(cookie.getName(), "utf-8"):cookie.getName();
		    String zhvalue=cookie.getValue()!=null?java.net.URLDecoder.decode(cookie.getValue(), "utf-8"):cookie.getValue();
		    String zhpath=cookie.getPath()!=null?java.net.URLDecoder.decode(cookie.getPath(), "utf-8"):cookie.getPath();
		    String zhcomment=cookie.getComment()!=null?java.net.URLDecoder.decode(cookie.getComment(), "utf-8"):cookie.getComment();
		    
		    //删除
		    if(zhname.trim().equals("cookie-name-lsy")){
		    	//从上面打印的数据看,路径是null,注释,域也是null。
		    	//而卧添加cookie的时候确实是有注释内容的,在删除时也遇到了问题,
		    	//就是如果路径是null据删除不了,这个已经做过测试了。
		    	//删除时必须重新设置path,这样才能正常删除!
		    	cookie.setPath("/");//必须设置路径!如果是其他路径,也要相应的设置。
		    	cookie.setMaxAge(0);//删除时设置为0
		    	System.out.println("----cookie-name-lsy已删除,原始信息如下:--------------");
		    	System.out.println("cookie----名字:"+zhname );
		    	System.out.println("值:"+zhvalue);
		    	System.out.println("路径:"+zhpath);
		    	System.out.println("失效时间:"+cookie.getMaxAge()+"秒");
		    	System.out.println("注释:"+zhcomment);
		    	System.out.println("版本:"+cookie.getVersion()+"。安全:"+cookie.getSecure()+"。域名:"+cookie.getDomain());
			    
		    	response.addCookie(cookie);
		    }
		    System.out.println("---------------------------------------------------------------------------------------");
		}
		
		
	}
	
	return SUCCESS;
}
	

public String editcookie() throws Exception{
	
	ActionContext ctx = ActionContext.getContext();
	HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); 
	HttpServletRequest request  = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); 
	response.setCharacterEncoding("UTF-8");
	PrintWriter out = response.getWriter();
	
	Cookie[] cookies = null;//这样便可以获取一个cookie数组
	if(request.getCookies()!=null){
		cookies=request.getCookies();
		
		for(Cookie cookie : cookies){
			String zhname=cookie.getName()!=null?java.net.URLDecoder.decode(cookie.getName(), "utf-8"):cookie.getName();
		    String zhvalue=cookie.getValue()!=null?java.net.URLDecoder.decode(cookie.getValue(), "utf-8"):cookie.getValue();
		    //删除
		    if(zhname.trim().equals("cookie-name-lsy")){
		    	//从上面打印的数据看,路径是null,注释,域也是null。
		    	//而我添加cookie的时候确实是有注释内容的
		    	//修改和删除也一样,必须设置路径path,不然浏览器找不到这个cookie
		    	cookie.setPath("/");//必须设置路径!如果是其他路径,也要相应的设置。
		    	cookie.setValue("editvalue");
		    	cookie.setMaxAge(3600);
		    	System.out.println("----cookie-name-lsy已经成功修改--------------");
		    	response.addCookie(cookie);
		    }
		    System.out.println("---------------------------------------------------------------------------------------");
		}
	}
	
	return SUCCESS;
}


	public String execute() throws Exception{
		return SUCCESS;
	}
	
}



request.getContextPath:
-----------------遍历cookie start------------------------------------
cookie----名字:JSESSIONID
值:47BD54C0CD6284F0DBFB0EC2333722EC
路径:null
失效时间:-1秒
注释:null
版本:0。安全:false。域名:null
---------------------------------------------------------------------------------------
cookie----名字:cookie-name-lsy
值:时间:2012-11-27 15:32:45
路径:null
失效时间:-1秒
注释:null
版本:0。安全:false。域名:null
---------------------------------------------------------------------------------------
-----------------遍历cookie end------------------------------------
---------------------------------------------------------------------------------------
----cookie-name-lsy已经成功修改--------------
---------------------------------------------------------------------------------------
request.getContextPath:
-----------------遍历cookie start------------------------------------
cookie----名字:JSESSIONID
值:47BD54C0CD6284F0DBFB0EC2333722EC
路径:null
失效时间:-1秒
注释:null
版本:0。安全:false。域名:null
---------------------------------------------------------------------------------------
cookie----名字:cookie-name-lsy
值:editvalue
路径:null
失效时间:-1秒
注释:null
版本:0。安全:false。域名:null
---------------------------------------------------------------------------------------
-----------------遍历cookie end------------------------------------

到目前为止,对cookie的增删改查都已经实现,算的上“会操作”了。

分享到:
评论

相关推荐

    Net Cookie操作读取数据

    本篇将深入探讨.NET中的Cookie操作,以及如何读取存储在Cookie中的数据。 一、Cookie的基本概念 Cookie由服务器端创建并发送到客户端(浏览器),客户端会在后续的请求中自动携带这些Cookie回服务器。每个Cookie都...

    一个简单的cookie操作类

    #### 一、Cookie操作类概览 在Web开发中,Cookie是一种常用的技术,用于存储用户的一些基本信息,以便于网站能够识别并记住用户的状态。本篇文章介绍了一个JavaScript实现的简单Cookie操作类,该类提供了一系列方法...

    Javascript Cookie操作类的封装

    本文将详细讲解如何封装一个Cookie操作类,实现对Cookie的增删改查功能。 首先,理解Cookie的基本概念是必要的。Cookie是由服务器端发送到浏览器并保存在本地的一个小文本文件,它由键值对组成,每个键值对之间用...

    JavascriptCookie一个轻量级别的浏览器端cookie操作的库

    总的来说,JavaScript Cookie库是前端开发中处理浏览器cookie操作的一个高效选择,尤其适用于需要在多个页面间保持用户状态或简单数据存储的场景。通过灵活的API和丰富的配置选项,可以方便地集成到任何JavaScript...

    Cookie操作帮助类

    Cookie操作帮助类通常是为了简化对Cookie的操作而设计的辅助类库,它可以帮助开发者更加高效、方便地创建、读取、更新和删除Cookie。下面我们将详细探讨Cookie的相关知识点以及如何使用一个名为HttpCookieHelper的C#...

    cookie操作封装js

    cookie操作工具类

    jsp中cookie操作

    ### JSP中的Cookie操作 在Web开发中,Cookie是一种常用的技术,用于跟踪用户的状态和偏好设置。通过在用户的浏览器上存储小型文本文件,网站能够识别并记住特定的用户信息。在JSP(JavaServer Pages)中,Cookie的...

    c#封装的cookie操作类

    为了方便开发者处理Cookie,我们可以封装一个Cookie操作类,如标题所述的"C#封装的cookie操作类"。这个类将提供读取、写入Cookie以及管理Cookie域和有效期的功能。 一、Cookie基本概念 Cookie是由服务器发送到用户...

    .net最完整的cookie操作类

    .NET框架中的Cookie操作是Web开发中的重要组成部分,用于在客户端和服务器之间传递状态信息。Cookie是一种小型文本文件,由服务器发送到用户的浏览器,并由浏览器在后续请求时返回给服务器。在C#中,处理Cookie主要...

    网上收集的WebBrowser的Cookie操作

    网上收集的WebBrowser的Cookie操作 在Web开发中,Cookie是非常重要的一种技术,用于存储用户的浏览器信息,以便于后续的交互操作。在这里,我们将探讨如何在WebBrowser中操作Cookie,包括将Cookie信息传给 ...

    CookiesjsJavaScript客户端的Cookie操作库

    "CookiejsJavaScript客户端的Cookie操作库" 指的是一种JavaScript库,专门用于在客户端(即用户浏览器)进行Cookie的操作。Cookiejs是这个库的名称,它提供了一组简单易用的API,帮助开发者方便地管理用户的Cookie。...

    Flash as3 cookie 操作实例源码

    这个“Flash AS3 Cookie操作实例源码”压缩包包含了一个具体的示例,教你如何在ActionScript 3(AS3)环境中进行Cookie的操作。 在AS3中,我们没有内置的库来直接处理Cookie,但可以通过使用`flash.net....

    js对cookie操作的封装

    无论是使用纯JavaScript还是jQuery,了解基本的Cookie操作原理对于Web开发者来说都是必要的。在实际项目中,可以根据需求选择合适的操作方式,或者利用已有的库进行扩展。同时,要注意处理Cookie的大小限制(通常为4...

    javascript cookie 操作框架 XCookie

    JavaScript Cookie 操作框架 XCookie 是一个用于方便地管理和操作浏览器cookies的工具,它简化了JavaScript中处理cookie的复杂性。在Web开发中,cookies经常被用来存储用户状态、会话信息或其他临时数据,而XCookie...

    Cookie操作类

    Cookie操作类,各种有关于Cookie技术的操作方法。

    webview与服务器共享cookie操作

    本篇将详细讨论如何实现"webview与服务器共享cookie操作"。 首先,理解cookie的工作原理至关重要。Cookie是由服务器发送到浏览器的一小块数据,用于存储用户状态信息,如登录状态、个性化设置等。当用户在浏览器中...

    Android下登录Demo(使用了读写Cookie操作)

    7. **使用第三方库**:像`android-cookie`这样的库提供了更便捷的Cookie管理方式,简化了Android应用中的Cookie操作。 总之,理解并正确使用Cookie是构建Android登录系统的关键。通过合理的读写和管理Cookie,可以...

    JS Cookie的操作

    总结,了解和掌握JavaScript中的Cookie操作对于Web开发人员来说是必不可少的技能,它能帮助我们实现用户会话管理、个性化设置等功能。通过本文档和提供的示例,你应该能够熟练地在你的项目中运用Cookie了。

    jQuery插件Cookie操作jQuery.Cookie -源码.zip

    《jQuery插件Cookie操作:深入理解jQuery.Cookie》 在JavaScript的世界里,Cookie是浏览器存储少量数据的一种机制,常用于用户偏好设置、会话管理等场景。jQuery作为一个强大的JavaScript库,为开发者提供了方便的...

    cookie操作js代码

    以下是对"cookie操作js代码"的详细解释: Cookie的基本概念: Cookie是由服务器端设置,存储在用户浏览器中的小文本文件。它通常包含键值对,用于追踪用户状态、保持登录信息、个性化设置等。每个Cookie都有一个...

Global site tag (gtag.js) - Google Analytics