0%

Cookie原理及使用

一、保持网络状态

  • HTTP是无状态协议,它不对之前发生的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。
    比如登录后页面跳转为了保持登录状态可以用两种方式记录状态①每次跳转都要再次登录(无法接受)②在请求报文中附加参数来管理登录状态。(cookie由此而来)

二、cookie的状态管理

1576215292(1)

  • 从图可以看出,cookie是服务端生成,保存在客户端。
    1576202805(1)

当服务端收到浏览器发送的用户ID时,就知道(通过读取cookie中字段,来进行身份鉴别)此次请求来自一个已经登录的用户。在以上的交互过程中,保持在客户端的用户ID就被称为cookie。

三、字段

  • 请求头对应Cookie字段、响应头对应Set-Cookie字段

1576202237(1)
Set-Cookie:value [ ;expires=date][ ;domain=domain][ ;path=path][ ;secure]

  • 当不写expires时,其有效期就是浏览器内存,浏览器关闭则消失。
  • 存储在硬盘中cookie可以在不同的浏览器间共享,比如火狐、IE;而基于内存的,只在当前浏览器有效,换相同的浏览器也不行
  • 当cookie从服务端发送给客户端后,服务端不存在显式删除cookie的方法。但是当它过期了,用户重新登录,则会覆盖之前的cookie。从而对客户端的cookie实质性的删除。

四、Cookie的用途

  • 记录用户登录状态
  • 购物车
    1576204837(1)
  • 将cookie保存在客户端,容易随着用户的操作导致cookie丢失或者被窃取。因此不安全!
    因此, Cookie中适合存储对安全性要求不高,但是需要长时间保存的数据。

    五、Cookie代码(购物车)

    https://www.okcode.net/article/80732
  • 用cookie实现方式:用户点击加入购物车之后将数据以cookie的形式存储在客户端,每次用户登录- 该网站时,则从该cookie中读取数据,这种方式不易丢失,读取速度也快。
  • 不用session:是因为session是基于浏览器会话的,浏览器关闭则消失。
  • 不用数据库:占用服务器资源,当数据量大时,影响服务器的响应速度。

    六、Cookie的限制

  1. Cookie数量和长度的限制。每个domain最多只能有20条cookie,若达到上限,则浏览器随机删除cookie;每个cookie长度不能超过4KB,否则会被截掉;浏览器最多300个cookie。
  2. 安全性问题。如果cookie被人拦截了,那人就可以取得所有的cookie信息。即使加密也与事无补,因为拦截者并不需要知道cookie的意义,他只要原样转发cookie就可以达到目的了。
    (cookie是服务端给客户端的用户标识,而不是进行身份认证)

    七、Cookie不可跨域名性

  • 在访问Servlet的时候浏览器并不是把所有的Cookie都带给服务器,也不会修改别的网站Cookie
    浏览器判断一个网站是否能操作另一个网站的Cookie的依据是域名,所以当访问baidu时候,浏览器只会将baidu的cookie带过去。
    Cookie由浏览器管理,浏览器能保证Google只会操作Google的。
    看看:https://segmentfault.com/a/1190000013129480