cookie介绍
cookie是浏览器保存在用户计算机上的少量数据,他与特定的WEB页或者WEB站点进行关联起来,自动地在WEB浏览器与WEB服务器之间传递
浏览器会将domain和path都相同的cookie保存在一个文件里,cookie间用*隔开。
- Path-路径 ---在某个域名下的cookie保存目录
如果在建立一个cookie,那么就在这个目录里就创建了一个cookie。
假设cookie的路径如下
/
/test
/test/test2
/test345
/test555/test666
注意事项:
- 相同键名的Cookie可以存在于不同的路径下,如果同一个目录下键名相同新建的会覆盖之前的
- 删除时,若果当前路径下没有键为key的cookie,则查询全部的父路径,检索到就执行删除操作(每次只能删除一个与自己最近的父路径cookie)
a . 必须指定与设定cookie时使用的相同的路径来删除cookie,而且cookie的键名不论大写,小写或大小混合都要指定路径
b . 键名为小写的时候,如果当前的路径为/test/test2,如果找不到再向上查询/test,/test555,/test345,如果还找不到就查询/。(/test555/test666不查询)
键名大小写混写或者大写的时候,不指定路径默认删除当前路径,并且不向上查询
- 读取cookie的时候只能读取直接父类的cookie
- 再做java的web项目的时候,由于一般的Web服务器(如tomcat或者jetty)都用Context来管理不同的WebApplication,这样队友每个Context都有不同的path,在一个Server中有多个Web Application时要特别小心,不要设置Path为/的Cookie,容易误操作(当然前提是域名相同 )
- Domain-域
指定关联的WEB服务器或者域。值是域名,比如baidu.com.,这是对path路径属性的一个延伸。如果我们想mp3.baidu.com能够访问test.baidu.com设置cookie。我们可以将domain的属性设置成“baidu.com”,这样mp3.baidu.com与test.baidu.com就都能访问到了。如果要在mp3.baidu.com创建一个mp3.baidu.com不能访问只有test.baidu.com能访问的cookie,那么就要将cookie的domin属性设置成”test.baidu.com”
注意:不能把cookie域属性设置成与设置它的服务器所在域不同的值。
- Secure-安全
指定cookie的值通过网络如何在用户与WEB服务器之间进行传递。这个属性的值字在浏览器中或许为”secure”获取为空(在java中用true,false设置,默认为false)。在缺省状态下,该属性为空,也就是使用不安全的http协议进行传递数据。如果cookie标记为secure,那么,他与WEB服务器之间就通过https或者其他安全协议传递数据。不过设置了secure属性其他人还是能在本地看到你机器本地保存的cookie。也就是说:cookie设置secure。只保证cookie与WEB服务器之间数据传输过程中进行加密,而保存在本地的cookie不加密。如果想让本地cookie也加密,得自己加密数据。
- Expires-过期时间
指定cookie的生命期。具体的值是指过期时间。默认关闭浏览器即过期,如果想要保存更长的时间就要设置日期,当过了到期日期,浏览器会删除cookie文件。现在已经被max-age属性所取代,max-age用秒来设置cookie生存期
java中操作cookie
- 设置cookie
Cookie cookie = new Cookie("key", "value");cookie.setMaxAge(60);//设置生存期秒为单位。设置为负值的话,关闭浏览器就失效cookie.setPath("/test/test2");//设置cookie路径。不设置的话,默认当前路径;为了让所有项目都访问到可以设置成cookie.setPath("/");response.addCookie(cookie);
2. 读取cookie
private String getCookieValue(HttpServletRequest request, String name) { Cookie[] cookies = request.getCookies(); String cookieValue = null; String cookieName = ""; if (cookies != null && cookies.length > 0) { for (Cookie cookie : cookies) { cookieName = cookie.getName(); if (name.equals(cookieName)) { cookieValue = cookie.getValue(); cookieValue = URLDecoder.decode(cookieValue); break; } } } return cookieValue; }
3. 删除cookie
Cookie cookie = new Cookie("key", null);cookie.setMaxAge(0); //设置为0为立即删除该Cookiecookie.setPath("/test/test2"); //删除指定路径上的Cookie,不设置该路径,默认为删除当前路径Cookieresponse.addCookie(cookie);
4. 修改cookie
Cookie cookie = new Cookie("key", "newvalue");cookie.setMaxAge(60);//设置生存期秒为单位。设置为负值的话,关闭浏览器就失效cookie.setPath("/test/test2");//设置cookie路径。不设置的话,默认当前路径response.addCookie(cookie);
当域相同,path相同,key相同的时候,重新创建cookie默认将原来的值value覆盖为新的newvalue