Cookie


存储在客户端

但用户第一次访问服务端的时候,服务器会生成一小块数据,然后把这个数据发送到浏览器的Cookie中,浏览器进行存储后,下面的每一次请求都会携带Cookie中的内容一起发送到服务器。

当接收到客户端发出的 HTTP 请求时,服务器可以发送带有响应的 Set-Cookie 标头,Cookie 通常由浏览器存储

Session

Cookie持久化

==Cookie==可以设置到期日期,因此可以分为 ==Session Cookie== 和==Persistent Cookie==,

  1. 如果没有设置到期日期,则把Cookie设置为会话Cookie,会话Cookie会存储在内存中,浏览器关闭即永久丢失
  2. 如果设置了到期日期==Expires 和 Max-age==,那么Cookie会在到期日期后过期
  3. 所以无论如何都会过期,只是时间长短而已

Cookie的应用

  • 会话管理

    登录,购物车,游戏得分或者服务器应该记住的其他内容

  • 个性化

    用户偏好,主题或者其他设置

  • 追踪

    记录和分析用户行为

Secure / httpOnly

安全问题

  1. Secure 用于加密Cookie,Cookie本身是不加密的,所以要进行加密操作,但是无论如何,他都是不安全
  2. HttpOnly 用于指定Cookie时候可通过客户端脚本访问

Domain / Path

==Domain/Path==指定了Cookie的作用域,表明Cookie应该发送给哪些URL

Session


数据存储在服务端,会相对安全,但是对服务器的负载大

  1. Session在服务器端程序运行的过程中创建的,创建Session的同时,服务器会为该Session生成唯一的session id, 这个session id在随后的请求中会被用来重新获得已经创建的Session

  2. 当你登陆一个网站的时候,如果web服务器端使用的是session,那么所有的数据都保存在服务器上,客户端每次请求服务器的时候会发送当前会话sessionid,服务器根据当前sessionid判断相应的用户数据标志,以确定用户是否登陆或具有某种权限。由于数据是存储在服务器上面。

  3. 当客户端再次发送请求的时候,会将这个session id带上, 服务器接受到请求之后就会依据session id找到相应的Session,从而再次使用Session

Session 通常有一个默认的过期时间(如 30 分钟),若超出该时间未进行交互,Session 将失效

Cookie和Session如何去选择


  • Cookie 只能存储 ASCII 码字符串,而 Session 则可以存储任何类型的数据,因此在考虑数据复杂性时首选 Session;
  • Cookie 存储在浏览器中,容易被恶意查看。如果非要将一些隐私数据存在 Cookie 中,可以将 Cookie 值进行加密,然后在服务器进行解密;
  • 对于大型网站,如果用户所有的信息都存储在 Session 中,那么开销是非常大的,因此不建议将所有的用户信息都存储到 Session 中。
  • cookie的生命周期当浏览器关闭的时候,就消亡了
    (1)cookie的生命周期是累计的,从创建时,就开始计时,20分钟后,cookie生命周期结束,
    (2)session的生命周期是间隔的,从创建时,开始计时如在20分钟,没有访问session,那么session生命周期被销毁
  • cookie:大小受浏览器的限制,很多是是4K的大小, session:理论上受当前内存的限制