Servlet学习笔记之Cookie详解

一、Cookie的创建

 

java.servlet.http.Cooie类只提供了一个带参数的构造方法用于创建Cookie:

 

java.servlet.http.Cookie(java.lang.String name, java.lang.String value) 

 

二、Cookie各属性的介绍

 

1、comment

一个描述cookie用途的注释。

2、domain

域名指定cookie在哪个域中有效,例如:Domain=“.blog.51cto.com”。

Cookie是不可跨域名的,域名www.google.com办法的Cookie不会被提交到www.baidu.com去,这是由Cookie的隐私安全机制决定的。

同一级域名的2个不同下一级域名(如www.cctv.com和mail.cctv.com)也不能交换使用Cookie,因为二者的域名并不严格相同。如果想使cctv.com名下的所有域名交互使用Cookie,可以如下设置Cookie的domain属性:

cookie.setDomain(".cctv.com");

domain参数必须以“.”开始,name相同但domain不同的2个Cookie是不同的Cookie。

3、maxAge

返回cookie在客户端最大的有效时间,以秒为单位。

Cookie的maxAge的默认值为-1,表明这是一个临时Cookie。临时Cookie不会被保存到磁盘上,它仅仅存在于当前浏览器所在的内存中,浏览器关闭后该类型的Cookie也随之消失。

如果将maxAge的值设为0,表示删除这个Cookie。当浏览器收到maxAge为0的Cookie时,会直接删除该Cookie。

如果设置为正整数,则表示该Cookie在客户端的有效时间。

4、name

Cookie的名字。

这个名称必须遵循RFC 2109的规范。这意味着它仅仅能包含ASCII码字符,并且不能包含逗号,分号,或者空格,或者以$开头的字符串,cookie的名字在创建后就不能再改变了。

5、path

Cookie对服务器上哪个url有效。

Cookie的path属性决定可以访问该Cookie的Web资源的路径。

如果只允许“/session/”下的资源使用该Cookie,则可以如下设置Cookie:cookie.setPath("/session/");。

设置为“/”时允许所有路径使用该Cookie,path属性需要使用“/”结尾,name相同但path不同的2个Cookie是不同的。

页面只能获取它属于的path的Cookie。

path的默认值为request。getServletContext()的返回值。

6、secure

这是一个boolean类型的值,表示是否强制浏览器只在安全的协议中传输Cookie。

HTTP协议不仅是无状态的,而且是不安全的。如果不希望Cookie在HTTP等不安全的协议中传输,可以设置该属性为true,则浏览器只会在HTTPS、SSL等安全协议中传输此类Cookie。

7、value

Cookie的指。

这个值可以发送给任何的服务器,但是仅对某个服务器有作用。这个值在创建后可以通过setValue方法来改变。

8、version

返回cookie内容所遵循的版本。(目前只有值为1时可用)。

 

三、方法详情

 

javax.servlet.http.Cookie

 

四、如何向客户端发送Cookie

Cookie  nameCookie = new  Cookie("name", "Tom");
nameCookie.setMaxAge(60*60*24*7);
nameCookie.setComment("这是用户名。");

Cookie  pwdCookie = new  Cookie("pwd", "123456789");
pwdCookie.setMaxAge(60*60*24*7);
pwdCookie.setComment("这是密码。");

response.addCookie(nameCookie);
resopnse.addCookie(pwdCookie);

 

五、如何获取客户端的Cookie

 

 

String  nameCookie = "name", name;
String  pwdCookie = "pwd", pwd;

Cookie  cookies = request.getCookies();

if(cookies != null){
     for(Cookie  c  :  cookies){
          if(c.getName().equals(nameCookie))
               name = c.getValue();
          if(c.getName().equals(pwdCookie))
               pwd = c.getValue();
     }
}

 

 六、如何修改和删除Cookie

 

Cookie类并没有提供修改、删除操作。

如果要修改某个Cookie,只需创建一个同名的Cookie,并添加到response中覆盖原来的Cookie。

如果要删除某个Cookie,只需创建一个同名的Cookie,并将maxAge设为0,添加到response中覆盖原来的Cookie即可。

修改、删除Cookie时,新建的Cookie除value和maxAge之外的所有属性,如name、path、domain等都要和原来的Cookie一样,否则,浏览器将视为2个不同的Cookie,不予覆盖,导致修改、删除失败。

 

猜你喜欢

转载自guoying252166655.iteye.com/blog/2041410