`
lushuaiyin
  • 浏览: 680379 次
  • 性别: 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的增删改查都已经实现,算的上“会操作”了。

分享到:
评论

相关推荐

    蚁群算法和BP神经网络的Java实现.zip

    该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示

    6-1儿童节快乐项目游戏开发

    项目整体思路: 做出几个场景, 总体是冒险类型的, 没有战斗场景, 所以不能算是RPG 使用语言: C++ 使用游戏引擎: Cocos2d-x 3.16

    基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本116.0.5818.0)

    资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom116.0.5818.0 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver116.0.5818.0 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)

    毕业设计,基于用户行为的社交网络推荐算法研究与实现

    基于用户行为的社交网络推荐算法研究与实现是一个结合了数据挖掘、机器学习和社交网络分析的项目。这个项目可以用于推荐用户可能感兴趣的内容或用户,以提高社交网络的互动性和用户体验。以下是一个基于用户行为的社交网络推荐算法的研究与实现建议: ### 1. 需求分析 - **用户角色**:确定系统的主要用户角色,如普通用户、内容创作者、管理员等。 - **核心功能**: - 用户行为分析:收集和分析用户在社交网络上的行为数据,如点赞、评论、分享等。 - 推荐算法:基于用户行为数据,设计推荐算法,推荐用户可能感兴趣的内容或用户。 - 系统集成:将推荐算法集成到社交网络平台中,实现推荐功能。 - 性能评估:评估推荐算法的准确性和效率。 ### 2. 技术选型 - **数据收集与处理**:使用爬虫或API接口收集用户行为数据,使用Python的Pandas、NumPy等库进行数据处理。 - **推荐算法**:研究并实现多种推荐算法,如协同过滤、基于内容的推荐、基于图的推荐等。 - **机器学习库**:使用Python的Scikit-learn、TensorFlow、PyTorch等库进

    基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本115.0.5790.90)

    资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom115.0.5790.90 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver115.0.5790.90 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)

    2024嵌入式面试资料嵌入式岗位笔试面试真题讲解文档

    2024嵌入式面试资料嵌入式岗位笔试面试真题讲解文档提取方式是百度网盘分享地址

    GSP质量管理制度执行情况检查考核记录

    GSP质量管理制度执行情况检查考核记录

    基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本115.0.5790.102)

    资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom115.0.5790.102 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver115.0.5790.102 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)

    热浸镀铝不锈钢板热处理工艺研究

    本试验以316L不锈钢为基体,先对试样进行热浸镀铝试验,之后再对热浸镀铝后的不锈钢分别进行300℃、500℃以及670℃三种温度下的热处理,保温4h和16h。热处理完成后再对试样分别进行硬度测试以及结合力试验。最后是用SEM、EDS以及XRD对试样进行元素分布、物相组成、组织形貌的分析。结果显示300℃温度下保温4h和16h,热处理对试样的性能提升有限,硬度以及结合力的性能相比原试样略微提升,镀层也没有出现裂纹或者孔隙,形貌较完好;而500℃温度下的保温,4h以及16h分别对试样性能提升十分明显,试样依旧没有出现裂纹与孔隙,而且在不锈钢基体和镀铝层之间形成了明显的分界层,形成了呈现球状的铁铝相;而对于670℃,因为不锈钢基体和镀铝层的晶界效应发生的程度的相对的不稳定,且生成了大量的质地很脆的呈针状形态的β(Al-Fe-Si)相以及大量大小不一的斑点形态的Al57Mn12,这使得镀层整体的内部组织严重不均匀,一系列问题从而导致了镀铝层出现了大量的裂纹和孔洞,从而使得670℃的热处理对镀铝层有害。最终500℃加热保温16h对性能提升效果最好,670℃保温加热16h对性能的提升最差。

    华为OD机试C卷- 迷宫问题(Java & JS & Python).md-私信看全套OD代码及解析

    私信博主免费看所有华为OD真题、考试报告、手撕代码、面试记录

    华为OD机试C卷- 九宫格按键输入(Java & JS & Python).md-私信看全套OD代码及解析

    私信博主免费看所有华为OD真题、考试报告、手撕代码、面试记录

    OLT-MA5680T-标准配置-20171127

    华为PON网络OLT设备MA5680T配置说明

    基于微信小程序的优购电商小程序(后端接口ssm框架实现)-毕设项目

    毕业设计基于微信小程序的优购电商小程序(后端接口ssm框架实现)-毕设项目.zip 个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 项目介绍: 优购电商小程序项目, 前端为微信小程序,后端接口为ssm框架实现,项目包含源码、数据库毕业设计基于微信小程序的优购电商小程序(后端接口ssm框架实现)-毕设项目.zip 个人经导师指导并认可通过的高分设计项目,评审分98分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 项目主要功能: "优购电商小程序是一款基于微信小程序平台的电子商务应用。该项目采用后端SSM(Spring、SpringMVC、MyBatis)框架实现接口,提供稳定的服务支持。主要功能包括商品浏览、购物车管理、订单处理及用户交互等,打造便捷的移动端购物体验。其特点在于深度融合微信生态,易于分享,具有良好的用户体验。技术栈涵盖小程序开发、Java后端编程和数据库管理,适合计算机科学与技术专业的毕设项目。"

    2024年知识图谱行业趋势洞察.pptx

    行业报告

    2024嵌入式大厂面经恒光科技

    2024嵌入式大厂面经恒光科技提取方式是百度网盘分享地址

    2024嵌入式大厂面经赛科世纪面试题

    2024嵌入式大厂面经赛科世纪面试题提取方式是百度网盘分享地址

    2024嵌入式面试资料蔚来2021嵌入式软件开发

    2024嵌入式面试资料蔚来2021嵌入式软件开发提取方式是百度网盘分享地址

    基于ssm+mysql的校园失物招领管理系统源码+数据库脚本(高分毕设项目)

    基于ssm+mysql的校园失物招领管理系统源码+数据库脚本(高分毕设项目)含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用,该项目可以作为毕设、期末大作业使用,系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值,项目都经过严格调试,确保可以运行! 基于ssm+mysql的校园失物招领管理系统源码+数据库脚本(高分毕设项目)含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用,该项目可以作为毕设、期末大作业使用,系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值,项目都经过严格调试,确保可以运行! 基于ssm+mysql的校园失物招领管理系统源码+数据库脚本(高分毕设项目)含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用,该项目可以作为毕设、期末大作业使用,系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值,项目都经过严格调试,确保可以运行!

    fpga中国创新中心.docx

    fpga中国创新中心 FPGA中国创新中心致力于推动FPGA技术在中国的应用和发展,提供FPGA相关的培训、技术支持和创新项目孵化服务。中心配备了先进的FPGA开发平台和实验设备,旨在培养FPGA领域的专业人才。

    校园社区论坛毕设项目,基于SpringBoot和Vue.js框架,类似牛客网讨论区 使用Spring Boot

    基于SpringBoot和Vue.js的校园社区论坛毕设项目是一个集成了多种现代Web技术的大规模系统。以下是一个基于这些技术栈的校园社区论坛的设计与实现建议: ### 1. 需求分析 - **用户角色**:确定系统的主要用户角色,如普通用户、版主、管理员等。 - **核心功能**: - 帖子发布与浏览:用户可以发布新帖子,浏览帖子列表。 - 回复与评论:用户可以对帖子发表回复和评论。 - 用户系统:注册、登录、个人中心等基础用户功能。 - 版块管理:版主可以管理所属版块的帖子、回复和评论。 - 后台管理:管理员可以管理整个论坛的内容、用户、版块等。 ### 2. 技术选型 - **前端**:Vue.js、Vuex、Vue Router。 - **后端**:Java(Spring Boot)、Spring MVC、MyBatis用于数据库操作。 - **数据库**:MySQL、Oracle或PostgreSQL等。 - **服务器**:Tomcat或Jetty。 - **缓存系统**:Redis。 - **日志系统**:ELK(Elasticsearch、Logst

Global site tag (gtag.js) - Google Analytics