一、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,不予覆盖,导致修改、删除失败。