Cookie和Session

Author Avatar
Nico Zhang 2月 10, 2018
  • 在其它设备中阅读本文章

概念

HTTP Cookie是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态

Cookie保存有以下方面的信息:

  • Cookie 的名字
  • Cookie 的值
  • 到期时间
  • 所属域名(默认是当前域名)
  • 生效的路径(默认是当前网址)

例如当前URL为 www. qq .com ,如果Cookie的路径是根目录/。那么这个Cookie对该域名的根路径和它的所有子路径都有效。如果路径设为/news,那么这个Cookie只有在访问 www. qq .com/news 及其子路径才有效

Cookie常用于以下三个方面:

  • 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
  • 个性化设置(如用户自定义设置、主题等)
  • 浏览器行为跟踪(如跟踪分析用户行为等)

创建cookie

  1. 服务器通过 Set-Cookie 响应头设置 Cookie
  2. 浏览器得到 Cookie 之后,每次请求都要带上 Cookie
  3. 服务器读取 Cookie 就知道登录用户的信息
Set-Cookie: <cookie名>=<cookie值>

//响应

HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: yummy_cookie=choco
Set-Cookie: tasty_cookie=strawberry

[页面内容]

此后,对该服务器发起的每一次新请求,浏览器都会将之前保存的Cookie信息通过Cookie请求头部再发送给服务器。

//请求
GET /sample_page.html HTTP/1.1
Host: www.example.org
Cookie: yummy_cookie=choco; tasty_cookie=strawberry

常见问题

  1. cookie不能跨浏览器访问(Safari不能访问Chrome的cookie)
  2. cookie存在计算机硬盘上(Windows在C盘的一个文件里)
  3. cookie有效期默认为20min,关闭页面就失效,后端可以修改有效期
  4. cookie可以被篡改
  5. cookie大小不超过4kb
  6. 两个网址只要域名相同和端口相同,就可以共享 Cookie。(协议可以不同)

Session

实现原理

服务器会为每一个访问服务器的用户创建一个session对象,并且把session对象的id保存在本地cookie上,只要用户再次访问服务器时,带着session的id,服务器就会匹配用户在服务器上的session,根据session中的数据,还原用户上次的浏览状态或提供其他人性化服务。

用途

  1. Session可以记录用户的登录与行为数据,即记录下用户目前访问服务器上的那些内容,状态是什么,而考虑到这些数据用户修改的随意性很大,并没有必要直接存储在数据库中。
  2. 在用户执行刷新操作时,即再次访问服务器时,可以直接根据Session,打开用户上次访问时网页的状态(如用户输入的表单内容等等),为用户带来更优的体验,提供个性化服务。
  3. 用户的session信息非常关键,它记录了用户在进入页面、查看结果、点击结果以及后继的操作(比如翻页、加购物车等)。只有通过session信息才能把用户的行为联系起来,构建出完整的模型,因此从海量数据中把每一个用户所有session的操作都完整地挖掘出来非常重要。

Session的有效时长

服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。具体根据服务器设置,一般在二三十分钟左右

Session和Cookie的区别与联系

具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。两者存储的都是用户登录信息,操作行为等等的数据。

  1. cookie是把用户的数据写在用户本地浏览器上, 其他网站也可以扫描使用你的cookie,容易泄露自己网站用户的隐私,而且一般浏览器对单个网站站点有cookie数量与大小的限制。
  2. Session是把用户的数据写在用户的独占session上,存储在服务器上,一般只将session的id存储在cookie中。但将数据存储在服务器对服务器的成本会高。
  3. session是由服务器创建的,开发人员可以在服务器上通过request对象的getsession方法得到session
  4. 一般情况,登录信息等重要信息存储在session中,其他信息存储在cookie中
  5. session是基于cookie实现的

来源:知乎作者:任云肖