Cookie的介绍,生命和路径的设置

Cookie遵循的是Http协议,虽然Http协议是无状态协议,也就是说每次的请求都是独立的,无法记录前一次请求的状态,但是我们可以通过Cookie来执行会话跟踪的技术。它是服务器在客户端用来寄存数据的,用来唯一的标示客户端浏览器到底是首次还是多次访问同一个网站的同一个站点,然后还有的功能就是能够把客户在一次会话中的数据的更改同步到当前客户中,翻译成小饼干,小甜点。      

Cookie它是通过请求头和响应头来在客户端浏览器和服务器之间进行传输的,它是在服务器端创建在,然后通过Set-Cookie这个响应头寄存到客户端。客户端会标示Cookie的来源(即哪个服务器的Cookie)当客户端再次访问这个站点时,会通过Cookie这个请求头把寄存的数据归还给服务器。服务器会根据Cookie中包含的数据来识别客户端。然后Cookie是有生命值得,也就是说,可以通过方法来设置它的生命的长短,但是它上面提示的永久也就是现实世界中的10年。当然也可以对它执行删除的操作,对浏览器单机右键,点击属性,如下图:

Http提供的是Cookie技术,Javaweb中提供的是Session技术来完成会话的跟踪,Session的底层依赖的还是CookieCookie的的组成是由键值对的形式,和Map类似,不过Map是多对键值对,而Cookie是一个。Cooki流程 图如下:
   



Cookie的基本规范:一个Cookie的大小必须在4KB以内   

   一个服务器在一个客户端最多寄存20Cookie   

   一个浏览器最多保存300Cookie*

Cookie:请求头,客户端发送给服务器的     

 格式:Cookiea=A;b=B;c=C;多个Cookie之间用分号分离开。

Set-Cookie:响应头,服务器发送给客户端。      

一个Cookie对应一个SetCookie     

 格式:

Set-cookie:a=A;                   

 Set-cookie:b=B;                   

 Set-cookie:c=C;     

 Cookie的覆盖: 当服务器向同一个客户端发送重复的Cookie是会把原来的Cookie的值进行覆盖,但是覆盖的知识键值对的值,并有覆盖键值对的值。服务器响应给客户端CookieCookie Cookie =new Cookie“ID””1001”;//创建Cookie对象并且把键值对的值封装到CookieResponse.addCookie(cookie);//添加Cookie头服务器中如何获取请求中的Cookie值:       Cookie[] cs = Resquest.getCookies();//获取请求中的所有的Cookie返回值是一个数组,注意判断空值异常。             If(cs!=null){             //增强型For循环遍历数组 for(Cookoe c:cs){                              if(cs.getName.equal(“ID”))                      response.getWriter().print(cs.getName()+”,”+cs.getValue());                    

}

}

UUID:表示是唯一标识的long类型的数,是一个不会重复的数。ID和序列号这种东西都和它有关。表示的是一个128位的值,获取方法:UUID uuid = UUID.randomUUID();

String s = uuid.toString();//结果会生成哟个32位的字符串,16进制

       Cookie的生命值:

Cookie的生命值指的是Cookie在客户端中存活的有效时间,可以通过SetMaxAgeint)来设置Cookie的最大生命值。

       Cookie.setMaxAge(int)这个属性的默认值是-1,表示只能在浏览器中生存,一旦关闭浏览器的窗口,Cookie就会消失。

       Cookie.setmMaAge(60*60),表示Cookie可以生存一个小时,当生命值大于0的时候浏览器就会把Cookie保存到硬盘上,就算关闭客户端浏览器,或者重启客户端电脑,Cookie依然会在硬盘上保存一个小时。

       Cookie.setMaxAge(0),Cookie的生命值的大小为0的时候,这个是一个特殊的值,它的作用就是删除Cookie,无论Cookie是在浏览器中还是在硬盘中。

 

Cookie 的路径:

       当访问路径如下时:Http://localhost:8080/day06-2/Aservlet这个时候Servlet会寄存一个Cookie在客户端,

       当访问的路径如下时:Http://localhost:8080/day06-2/Bservlet会不会把之前的Cookie归还呢?

       :会归还,总结起来就是一句话,当访问的路径包含Cookie的路径时,就会归还,上述两个的Cookie的路径都是/day06-2,所以会归还。如果Cookie的路径没有设置,那么默认的Cookie路径就是,当前资源所在的路径。

       如何设置Cookie的路径:

可以通过public void setPath(String path);这个方法来设置你的Cookie的路径。当Cookie的路径时/day6-2时,下面的访问都会带上cookie

       */day06-2/a/b/c/Aservlet

*/day06-2/Aservlet

*day06-2/Bservlet

注:也就是说当你访问的Servlet路径中包含你Cookie的路径时,都会带上Cookie然后归还给服务器。

 

Aservlet|保存Cookie

Http://localhost:8080/day06-2/Servlets/Aservlet;

Bservlet保存Cookie

Http://localhost:8080/day06-2/BServlet;

 

访问CServlet时的路径如下:会带哪个Cookies:

Http://localhost:8080/day06-2/Cservlet

注:会带B不带A

 

访问访问DServlet时的路径如下:会带哪个Cookie:

Http://localhost:8080/day06-2/Servles/Bservlet

注:会带A也带B

解释:原因就是:当你访问的资源路径包含了哪一个Cookie的路径时,就会在请求的时候附带哪一个Cookie,但是当你访问的资源包含了儿子的路径时,那么必须把父亲的cookie带上,当你访问的路径只包含了父亲的路径时,就只带父亲的路径,不带儿子的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值