前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Session Cookie Token

Session Cookie Token

作者头像
王小明_HIT
发布2019-08-13 09:54:04
5940
发布2019-08-13 09:54:04
举报
文章被收录于专栏:程序员奇点程序员奇点

为什么需要Session 、Cookie 、 Token ?

早期的互联网相当于一个文件服务器,访问服务器,只是提供了文件浏览功能。每次请求都是一个 HTTP 协议请求,服务器并不知道是谁访问了互联网,后来随着电子商务,论坛等网站的发展,有了用户登录,服务器需要知道是谁登录了网站。怎么解决这个问题呢?

HTTP 是一个无状态协议,什么是无状态呢?就是说这一次请求和上一次请求是没有任何关联。这种无状态的的好处是快速,坏处是假如我们想要把www.zhihu.com/login.html和www.zhihu.com/index.html关联起来,无关联不能知晓,这次是哪个用户访问了这个网页,页面跳转了,不知道还是不是同一个用户在访问, 因此采用了一些工具和手段将网页关联起来,采用共享信息的办法,让域名下所有网页共享同一个信息,比如说共享用户登录信息。服务器就知道了是谁在访问这个网页了。

Session

代码语言:javascript
复制
Session 和 Cookie 的作用都是为了保持访问用户与后端服务器的交互状态

Session 就是来解决网页共享数据的一种方式,Session 相当于用户的档案库,存储在服务器端,用户的登录信息存储在Session 中,服务器为每个用户分配一个Session ID ,客户端保存这个SessionID就可以了。客户端退出后,清除Session ,但是因此带来了一个问题 ,如果用户小明访问了服务器 a, 服务器 a 保存了用户的信息,此时跳转到另外一个页面,这个页面在服务器 b, 要无缝连接,客户端无感知,只能服务器 b 的 session 保存小明的信息,验证登录用户还能不能访问服务器,否则只能让小明就不能访问服务器 b,用户需要重新登录。

代码语言:javascript
复制
这也是 Session 的缺点,不容易在多台服务器之间共享。

Session 不方便服务器之间的同步,怎么办? 服务器端能不能不保存 Session,客户端保存就可以了,服务器只要验证就行了。

Cookie

Cookie 通俗点说,就是用户通过 HTTP 访问一个服务器时,这个服务器还会将一些 Key/Value 键值对返回给客户端浏览器,客户端浏览器下次访问服务器时,将Cookie 带回给服务器。服务器不存储用户的登录信息,通过验证 Cookie 信息来确认是不是保持着用户和服务器直接的交互状态。

HTTP 访问的过程

  • 首先,客户端会发送一个http请求到服务器端。
  • 服务器端接受客户端请求后,建立一个session,并发送一个http响应到客户端,这个响应头,其中就包含Set-Cookie头部。该头部包含了sessionId。Set-Cookie格式如下:
代码语言:javascript
复制
  Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]
  • 在客户端发起的第二次请求,假如服务器给了set-Cookie,浏览器会自动在请求头中添加cookie
  • 服务器接收请求,分解cookie,验证信息,核对成功后返回response给客户端

Cookie 是保存在客户端的,避免了 Session 存储在服务器端带来了资源开销,也避免了服务器之间共享 Session , 但是也有缺点,使用 Cookie 来传递消息,随着 Cookie 数量的增多和访问量的增加。占用网络带宽消耗很大。但是一旦客户端被劫持,Cookie 信息泄露,就可能会出现其他用户盗用 Cookie 信息, 网站登录身份从游客变成了用户登录了,造成用户信息全部泄露。那有什么办法让 访问更加安全一些呢?

Token

Token 和 Cookie 有点类似,用户访问服务器时,服务器返回一个 Token ,用户下次访问时,将这个 Token 信息带回给服务器,这样就能完成验证了。只是和 Cookie 不一样的是,Cookie 携带的是明文信息,Token 对信息进行了处理。

用户访问服务器,服务器返回 Token ,这个Token 是用服务器的密钥进行加密的,对数据进行一个签名,秘钥只有服务器知道,别人就不能伪造 Token 信息了,用户再把 Token 信息带过来时验证就可以了。(是不是想说,用户怎么知道服务器是不是别人伪造了,这就牵扯 公钥私钥了,这里就不深入了),总之,服务器可以确认,用户的请求不是伪造的了。比Cookie 就相对安全了。

Token 访问过程

  • 用户通过用户名和密码发送请求服务器程序验证。
  • 服务器程序返回一个签名的token 给客户端。
  • 客户端储存token,并且每次用于每次发送请求。
  • 服务器验证token并返回数据。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员奇点 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档