Cookie的用途:服务器可以从下次请求中,通过Cookie拿到上一次请求保存到Cookie的数据。
服务器使用Cookie来跟踪客户端状态。服务器就是从当次请求中通过Cookie拿到
上次请求保存到Cookie中的数据来查看客户端状态的。
保存购物车。购物车中的商品不能使用request对象保存,因为一个请求对应一个request
对象,而购物车它是一个用户(浏览器)向服 务器发送的多次请求,所以可以利用下次请求
通过Cookie拿到上次请求保存到Cookie中的数据,来使用Cookie再次保存,以此来添加
购物车。
显示上次登录名。多次登录也是一个用户(浏览器)向服务器发送多次请求,所以也可以利用
下次请求通过Cookie拿到上次请求保存到Cookie中的用户名,来获取上次的登录用户名。
特点:
以上可知Cookie是保存在浏览器上的,且是同一(相同)浏览器多次请求服务器来操作Cookie
以获得上次请求保存在Cookie中的数据的,所以Cookie是不能跨浏览器来操作的。
而且正因为Cookie是保存在浏览器中的,所以它相对不安全。
3>JavaWeb中使用Cookie
原始方式:
>服务器使用response发送Set-Cookie响应头向浏览器保存Cookie
response.addHeader("Set-Cookie","aaa=AAA");(多值)
aaa=AAA :aaa是名称,等号后面是内容(只能这么写)
>服务器使用request获取Cookie请求头,来获取当次请求发送的保存了上次请求
数据的Cookie。
Enumeration <String> | request.getHeaders("Cookie");(多值)
快捷方式:
>使用response.addCookie()方法向浏览器响应保存Cookie。
>使用request.getCookies()方法获取当次请求发送的保存了上次请求数据的Cookie
4>Cookie的生命周期
Cookie除了name和value属性外,还有一个maxAge:即Cookie的最大生命,
即Cookie可保存的最大时长,以秒为单位。
1、maxAge>0:浏览器会把Cookie保存在客户机硬盘上,有效时长由maxAge的值决定。
如,cookie.setMaxAge(60)表示Cookie会被浏览器保存在硬盘上60秒
2、maxAge<0:Cookie只在浏览器的运行内存中存在,当浏览器关闭,浏览器进程结束
内存销毁时,同时Cookie被销毁。(浏览器关闭时所有的相同浏览器关闭也就是如果你开了
三个谷歌浏览器,必须三个全部关掉才算,本质上这个三个都是窗口关了只能算是关了一个
窗口)
如,cookie.setMaxAge(-1)表示浏览器关闭则Cookie销毁。
3、maxAge=0:浏览器会马上删除这个Cookie
如,cookie.setMaxAge(0)浏览器则会立刻销毁此Cookie。
注意:当没有设置Cookie的maxAge属性时默认是-1,Cookie默认只在浏览器内存
中存活,即浏览器关闭,Cookie销毁。
5>Cookie的路径(path属性):
Cookie的path属性并不是设置Cookie在客户端的保存路径,
而是当浏览器访问服务器
的某个资源路径时,决定是否需要给服务器归还Cookie
当浏览器访问请求服务器
的某个资源路径时,如果次访问路径包含这个Cookie的path属性设置的路径部分时
那么就向服务器归还这个Cookie
Cookie的path属性由服务器在创建Cookie时设置。
如:aCookie.setPath("/JspTest1/");
bCookie.setPath("/JspTest1/jsps/");
cCookie.setPath("/JspTest1/jsps/cookies/");
>浏览器访问请求:/JspTest1/index.jsp,此访问路径包含了aCookie
的路径,所以向服务器归还aCookie
>浏览器访问请求:/JspTest1/jsps/a.jsp,此访问路径把aCookie和
bCookie的路径都包含所以向服务器归还
aCookie和bCookie
>浏览器访问请求:/JspTest1/jsps/cookies/b.jsp,此访问路径把
aCookie和bCookie和cCookie的路径都包含,所以向服务器归还:
aCookie、bCookie、 cCookie
意思就是说只要包含访问请求路径含有setpath中参数就返回调用者
如aCookie的的路径(setpath),访问路径包含则归还aCookie
创建的Cookie没有设置path属性时,此Cookie的默认路径就是,当前请求
访问路径的父路径。如,当请求访问/JspTest1/cookies2/c.jsp,服务器创建并向浏览器
响应一个Cookie,那么此Cookie的默认路径就是/JspTest1/cookies2/
6>Cookie的域(domain属性)
Cookie的domain用于指定Cookie的域名,当多个二级域之间共享同一Cookie时使用
例如:在www.baidu.com
zhidao.baidu.com
news.baidu.com
tieba.baidu.com
4个域请求之间共享同一Cookie
1>设置此Cookie的domain为:cookie。setDomain(“.baidu.com”);
2>必须设置此Cookie的path:cookie.setPath("/");
可在同一应用服务器内共享设置为/的话
因为域名封装了请求的项目路径,所以使用域名请求服务器没有项目名,
也就没有办法给Cookie设置具体的路径,所以必须使用“/”通配所有请求路径,否则多个域名
请求之间无法传递共享同一个Cookie
//创建Cookie
Cookie ck -
//设置Cookie的域(domain属性)为“.baidu.com”;
ck.setDomain(".baid.com");
//设置Cookie路径(path属性)为“/”
ck.setPath("/");
//向浏览器响应Cookie
response.addCookie(ck);向客户端添加Cookie