Javaweb Cookie机制

Javaweb Cookie机制

1、前言

  HTTP协议是一种无状态的协议,WEB服务器自己不能识别出哪些请求是同一个浏览器发出的 ,浏览器的每一次请求都是彻底孤立的,即便 HTTP1.1 支持持续链接,但当用户有一段时间没有提交请求,链接也会关闭。java

  怎么才能实现网上商店中的购物车呢:某个用户从网站的登陆页面登入后,再进入购物页面购物时,负责处理购物请求的服务器程序必须知道处理上一次请求的程序所获得的用户信息。 web

  做为 web 服务器,必须可以采用一种机制来惟一地标识一个用户,同时记录该用户的状态。这就是本文要说的Javaweb cookie机制。数组

2、会话和会话状态

  WEB应用中的会话是指一个客户端浏览器与WEB服务器之间连续发生的一系列请求和响应过程。浏览器

  WEB应用的会话状态是指WEB服务器与浏览器在会话过程当中产生的状态信息,借助会话状态,WEB服务器可以把属于同一会话中的一系列的请求和响应过程关联起来。 服务器

  如何实现有状态的会话?

  WEB服务器端程序要能从大量的请求消息中区分出哪些请求消息属于同一个会话,即能识别出来自同一个浏览器的访问请求,这须要浏览器对其发出的每一个请求消息都进行标识:属于同一个会话中的请求消息都附带一样的标识号,而属于不一样会话的请求消息老是附带不一样的标识号,这个标识号就称之为会话ID(SessionID)。
  在 Servlet 规范中,经常使用如下两种机制完成会话跟踪:Cookie和Session。 cookie

  本文主要讨论Cookie机制,Session机制你们可了解个人下一篇博文。学习

3、Cookie机制

  Cookie机制采用的是在客户端保持 HTTP 状态信息的方案。网站

  Cookie是在浏览器访问WEB服务器的某个资源时,由WEB服务器在HTTP响应消息头中附带传送给浏览器的一个小文本文件。 ui

  一旦WEB浏览器保存了某个Cookie,那么它在之后每次访问该WEB服务器时,都会在HTTP请求头中将这个Cookie回传给WEB服务器。url

  底层的实现原理: WEB服务器经过在HTTP响应消息中增长Set-Cookie响应头字段将Cookie信息发送给浏览器,浏览器则经过在HTTP请求消息中增长Cookie请求头字段将Cookie回传给WEB服务器。

  一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。

  一个WEB站点能够给一个WEB浏览器发送多个Cookie,一个WEB浏览器也能够存储多个WEB站点提供的Cookie。

  浏览器通常只容许存放300个Cookie,每一个站点最多存放20个Cookie,每一个Cookie的大小限制为4KB。

Cookie传送过程示意图

4、在Servlet程序中使用Cookie

  Servlet API中提供了一个javax.servlet.http.Cookie类来封装Cookie信息,它包含有生成Cookie信息和提取Cookie信息的各个属性的方法。

  Cookie类的经常使用方法:

  ①构造方法: public Cookie(String name,String value)
  ②getName方法
  ③setValue与getValue方法
  ④setMaxAge与getMaxAge方法
  ⑤setPath与getPath方法
  ⑥HttpServletResponse接口中定义了一个addCookie方法,它用于在发送给浏览器的HTTP响应消息中增长一个Set-Cookie响应头字段。
  ⑦HttpServletRequest接口中定义了一个getCookies方法,它用于从HTTP请求消息的Cookie请求头字段中读取全部的Cookie项。

5、cookie的发送

  1.建立Cookie对象

  2.设置最大时效

  3.将Cookie放入到HTTP响应报头

  若是建立了一个cookie,并将他发送到浏览器,默认状况下它是一个会话级别的cookie; 存储在浏览器的内存中,用户退出浏览器以后被删除。若但愿浏览器将该cookie存储在磁盘上,则须要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。

  发送cookie须要使用HttpServletResponse的addCookie方法,将cookie插入到一个 Set-Cookie HTTP响应报头中。因为这个方法并不修改任何以前指定的Set-Cookie报头,而是建立新的报头,所以将这个方法称为是addCookie,而非setCookie。

6、会话cookie和持久cookie的区别

  若是不设置过时时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie通常不保存在硬盘上而是保存在内存里。

  若是设置了过时时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过时时间。

  存储在硬盘上的cookie能够在不一样的浏览器进程间共享,好比两个IE窗口。而对于保存在内存的cookie,不一样的浏览器有不一样的处理方式。

7、cookie的读取

  1.调用request.getCookies
  要获取浏览器发送来的cookie,须要调用HttpServletRequest的getCookies方法,这个调用返回Cookie对象的数组,对应由HTTP请求中Cookie报头输入的值。

  2.对数组进行循环,调用每一个cookie的getName方法,直到找到感兴趣的cookie为止

8、跟踪用户上次访问站点的时间

  功能:帮助网站实现提示客户端计算机上次访问网站的时间

  实现原理:将每个会话做为一次访问过程,将每次会话的开始时间做为每次访问网站的时间,而后将这个时间以Cookie的形式存储到客户端的计算机中,客户端进行下次访问时经过该Cookie回传上次访问站点的时间值。

  为了让Cookie信息在客户端浏览器或计算机关闭后仍然保持存在,Cookie的保存时间被设置为了一年。

若是,您对个人这篇博文有什么疑问,欢迎评论区留言,你们互相讨论学习。
若是,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
若是,您但愿更容易地发现个人新博客,不妨点击一下左下角的【关注我】。
若是,您对个人博文感兴趣,能够关注个人后续博客,我是【AlbertRui】。

转载请注明出处和连接地址,欢迎转载,谢谢!

相关文章
相关标签/搜索