<1>Http协议与Cookie:
Cookie是Http协议制定的!先由服务器创建Cookie并保存到浏览器,浏览器下次请求服务器时会把上一次请求从服务器得到的Cookie再归还给服务器。
1.第一次请求服务器,服务器创建Cookie并保存数据,再将Cookie响应保存在浏览器上

2.浏览器第二次再请求服务器时,就会将上请求服务器获取并保存在浏览器上 的Cookie归还给服务器,服务器又可以重新拿到Cookie中的数据。

<2>创建cookie的两种方式:

①原始方式:
 > 服务器使用response发送Set-Cookie响应头向浏览器保存Cookie。 response.addHeader("Set-Cookie","aaa-AAA");  (多值)
> 服务器使用request获取Cookie请求头,来获取当次请求发送的保存了上次请求
  数据的Cookie。
 

Enumeration<String> | request.getHeaders("Cookie");  (多值)



②快捷方式:
  >使用response.addCookie()方法向浏览器响应保存Cookie。
  >使用request.getCookies()方法获取当次请求发送的保存了上次请求数据的Cookie。

如图

                              


<3>Cookie的用途:服务器可以从下次请求中,通过Cookie拿到上一次请求保存到Cookie中的数据。服务器使用Cookie来跟踪客户端状态。服务器就是从当次请求中通Cookie拿到上次请求保存到Cookie中的数据来查看客户端状态的。


例如:①购物车。购物车中的商品不能使用request对象保存,因为一个请求对应一个request对象,而购物车它是一个用户(浏览器)向服务器发送的多次请求,所以可以利用下次请求通过Cookie拿到上次请求保存到Cookie中的数据,来使用Cookie再次保存,以此来添加购物车

②显示上次登录名。多次登录也是一个用户(浏览器)向服务器发送多次请求,所以也可以利用下次请求通过Cookie拿到上次请求保存到Cookie中的用户名,来获取上次的登录用户名。


以上可知Cookie是保存在浏览器上的,且是同一浏览器多次请求服务器来操作Cookie以获得上次请求保存在Cookie中的数据的,所以Cookie是不能跨浏览器操作的。而且正因为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的路径时,那么就向服务器归还这个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,此访问路径把aCookieb和Cookie的路径都包含,所以向服务器归还:aCookie、bCookie


③浏览器访问请求:/JspTest1/jsps/cookies/b.jsp,此访问路径把aCookie和bCookie和cCookie的路径都包含,所以向服务器归还: aCookie、bCookie、 cCookie



 当创建的Cookie没有设置path属性时,此Cookie的默认路径就是,当前请求访问路径的父路径。如,当请求访问/JspTest1/cookies2/c.jsp,服务器创建并向浏览器响应一个Cookie,那么此Cookie的默认路径就是/JspTest1/cookie