Cookie
1.Http协议与Cookie
--》Cookie是由Http协议指定的,现有服务器保存cookie到浏览器。在下次浏览器请求服务器时再把上一次请求得到的cookie归还给服务器;
--》cookie是由服务器创建并保存到浏览器端的一个键值对。服务器保存cookie的响应头:Set-Cookie:aaa=AAA Set-Cookie:bbb=BBB
response.addHeader("Set-Cookie","aaa=AAA"); response.addHeader("Set-Cookie","bbb=BBB");//多次添加Cookie
--》当浏览器请求服务时,会把服务器保存的cookie随请求发送给服务器,浏览器归还cookie的请求头:Cookie:aaa=AAA;bbb=BBB //一次返回Cookie
--》Http协议规定(保证不给浏览器太大的压力):
===1个cookie最大4kb
===1个服务器最多想一个浏览器保存20个cookie
===1个浏览器最多可保存300个cookie
2.cookie的用途
--》服务器使用cookie来跟踪客户端状态;
--》保存购物车(购物车中的商品不能使用request保存,因为它是一个用户想服务器发送的多个请求信息);
--》显示上次登录名(一个用户多次请求,多次登录);
3.JavaWeb中使用cookie:
不再使用原始response.setHeader()的方法,而是使用便捷方式。
--》向浏览器保存cookie:response.addCookie();一次设置一个键值对,可设置多次
--》获取浏览器归还的cookie:request.getCookies();归还所有的键值对(cookies)
保存cookie
<%
Cookie cookie1=new Cookie("aaa","AAA");
Cookie cookie2=new Cookie("bbb","BBB");
response.addCookie(cookie1);
response.addCookie(cookie2);
%>
获取Cookie
<%
Cookie[] cookies=request.getCookies();
if(cookies!=null){
for(Cookie c:cookies){
out.println(c.getName()+":"+c.getValue()+"
");
}
}
%>
4.cookie详解:
cookie是不能跨浏览器的。
Cookie不仅仅只有name和value两个属性,其他属性有:
(1)maxAge(生存时间):cookie的最大生命周期,即cookie可保存的最大时长。以秒为单位,例如:cookie.setMaxAge(60)表示这个cookie会被浏览器保存到硬盘上;60*60*24*365*10------10年
--》maxAge>0:浏览器会把cookie保存到客户机硬盘上,有效时长由maxAge的值决定;
--》maxAge<0:cookie只在浏览器内存中保存,当用户关闭浏览器时,浏览器进程结束,同时cookie也就死亡了;
--》maxAge=0:浏览器会马上删除这个cookie。
(2)path(路径)
--》cookie的path路径不是设置这个cookie在客户端的保存路径;
--》cookie的path由服务器创建cookie时设置(设置cookie的页面所在的当前目录);
--》当浏览器访问服务器某个路径时,需要归还那些Cookie给服务器呢?这由Cookie的path决定;
--》浏览器访问服务器的路径,如果包含某个cookie的路径,那么就会归还这个cookie。
看访问路径是否包含cookie路径,包含则返回此cookie,否则不返回。
(3)domain(cookie的域)
--》domain用来指定cookie的域名,当多个二级域中共享cookie时才有用。
例如:www.baidu.com、zhidao.baidu.com、news.baidu.com、tieba.baidu.com之间共享cookie时可以使用domain
设置domain为:cookie.setDomain(".baidu.com");
设置path为:cookie.setPath("/");