首页 > 其他 > 详细

Cookie、Session、Token

时间:2021-02-07 00:02:02      阅读:29      评论:0      收藏:0      [点我收藏+]

1. Cookie

  • 什么是 Cookie?
  • Cookie 的优点
  • Cookie 的安全隐患

2. Session

  • 什么是 Session?
  • Session 的优点
  • Session 的缺点
  • Cookie 与 Session 的区别 

3. Token 

  • Token 的定义
  • Token 的目的
  • 基于 token 的身份认证流程
  • Token 的优点
  • Token 的应用场景

 

 

1. Cookie

什么是 Cookie?

对于 HTTP 无状态的问题,解法方案有很多种,其中比较简单的方式用 Cookie 技术。Cookie 通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。相当于,在客户端第一次请求后,服务器会下发一个装有客户信息的「小贴纸」,后续客户端请求服务器的时候,带上「小贴纸」,服务器就能认得了了

Cookie 是由 Web服务器保存在用户浏览器(客户端)上的小文本文件(内容通常经过加密),它可以包含有关用户的信息。无论何时,只要客户端连接到服务器,服务器都可以访问 cookie 信息,可以看作是浏览器缓存。

浏览器把 cookie 以 name=value 形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该 cookie 发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保 cookie 不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的 cookie 数量是有限的。

Cookie 四大要素

  • Name / Value:内容本身
  • Domain:空间维度的安全性(限定共享范围,超出不可见)
  • Expires:时间维度的安全性(限定共享时间,过期即销毁)

技术分享图片

Cookie 的优点

Cookie 非常轻便,非常小,且对于服务端是没有任何压力的,因为是 cookie 存在浏览器里面,还可以设置失效时间,生效时间等。

客户端和服务端都能生成 cookie,它用来存放一些不敏感的数据,数据类型只能是字符串(json)。

Cookie 的安全隐患

Cookie 欺骗

Cookie 记录了用户的帐户 ID、密码之类的信息,通常使用 MD5 方法加密后在网上传递。经过加密处理后的信息即使被网络上一些别有用心的人截获也看不懂。然而,现在存在的问题是,截获 cookie 的人不需要知道这些字符串的含义,只要把别人的 cookie 向服务器提交,并且能够通过验证,就可以冒充受害人的身份登陆网站,这种行为叫做 cookie 欺骗。非法用户通过 cookie 欺骗获得相应的加密密钥,从而访问合法用户的所有个性化信息,包括用户的 E-mail 甚至帐户信息,对个人信息造成严重危害。

Cookie 截获

Cookie 以纯文本的形式在浏览器和服务器之间传送,很容易被他人非法截获和利用。任何可以截获 Web 通信的人都可以读取 cookie。Cookie 被非法用户截获后,然后在其有效期内重放,则此非法用户将享有合法用户的权益。例如,对于在线阅读,非法用户可以不支付费用即可享受在线阅读电子杂志。 

 

2. Session

什么是 Session?

在不同的场合中 session 一词的含义也不尽相同,它可以代表服务器与浏览器的一次会话过程(从一个浏览器窗口打开到关闭的这个期间),也可以指一类用于在客户端与服务器之间保持状态的解决方案。

Session 从字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道当前和你交谈的是张三而不是李四呢?对方肯定有某种特征(长相等)表明他就是张三。

Session 技术也是类似的道理,服务器要知道当前发请求给自己的是谁。为了做这种区分,服务器就要给每个客户端分配不同的“身份标识”,然后客户端每次向服务器发请求的时候,都带上这个“身份标识”,服务器就知道这个请求来自于谁了。至于客户端怎么保存这个“身份标识”,可以有很多种方式,对于浏览器客户端,大多采用 cookie 的方式。

Session 一般保存在服务器端的文件或数据库中,默认则保存在文件中,session 文件是公有的。目前还可以通过使用 redis 来保存 session 信息。

Session 的优点

服务器使用 session 技术把用户的信息临时保存在了服务器上,用户离开网站后其 session 会被销毁。这种用户信息存储方式相对 cookie 来说更安全。

Session 的缺点

1. Session 保存在服务器端,每次读取都在服务器进行,会占用服务器资源。

2. 如果 web 服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候 session 会丢失。

Cookie 与 Session 的区别 

  • Cookie 保存在客户的浏览器上;Session 保存在服务器上(禁用 cookie 后,session 不能正常使用)。

  • 单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存20个 cookie。而 session 理论上是无限量的。

  • Session 会在一定时间内保存在服务器上。当访问增多时会比较占用服务器资源,所以考虑到减轻服务器压力方面,应当使用 cookie。
  • 建议:将登录信息等重要信息存放为 session,其他信息如果需要保留,可以放在 cookie 中。

 

3. Token 简介

Token 的定义

Token 是服务端生成的一串加密字符串,以作为客户端进行请求的一个令牌。当第一次登录后,服务器生成一个 token 并将此返回给客户端,以后客户端只需带上这个 token 前来请求数据即可,无需再次带上用户名和密码。

Token 的目的

Token 技术主要是解决 session 的性能问题。客户端登录成功之后 session 保存在内存。一台服务器的内存大小是固定的,当内存越满时,服务器的性能就越低。那怎么去解决的呢?就是这个 token。

Token 其实也是一个字符串,它最大的一个特点就是不会存储在服务器,还有一个特点就是不再依赖于 cookie 的形式,它可以是请求头或者是请求体的方式也就是 session 依赖于 cookie,由服务器生成、存储和验证,并以 cookie 的方式存在于客户端,客户端以同样方式发送给服务端。

Session 有状态,token 无状态。因此使用 token 的话,服务器不需要保存会话状态,不用担心会话丢失利用这种方式也方便部署分布式服务,将一个服务拆分成多个小服务,减轻单台服务器的压力。

基于 token 的身份认证流程

  1. 首先客户端输入用户名、密码进行登录操作;
  2. 服务器验证用户名、密码的正确性,验证通过之后,服务器对一个 json 字符串进行加密,加密的内容、加密方法可以自己确定。然后将加密后的字符串(token)返回给客户端;
  3. 客户端需要自己将 token 保存起来,比如放在 Cookie 里或者 Local Storage 里;
  4. 接下来,客户端的每次请求都需要带上这个 token;
  5. 对于客户端的每次请求,服务器首先都要去获取 token,检查 token 是否合法,并解密 token 内容,检查 token 是否过期等。

技术分享图片

Token 的优点

在 Web 领域,基于 token 的身份验证随处可见。在大多数使用 Web API 的互联网公司中(Facebook、Twitter、Google+、GitHub等),token 是多用户下处理认证的最佳方式,其好处有:无状态、可扩展、支持移动设备、跨程序调用、安全等。

1. 无状态、可扩展

在客户端存储的 token 是无状态的,并且能够被扩展。基于这种无状态和不存储 session 信息,负载均衡服务器能够将用户信息从一个服务传到其他服务器上。如果我们将已验证的用户的信息保存在 session 中,则每次请求都需要用户向已验证的服务器发送验证信息(称为 session 亲和性)。当用户量大时,可能会造成一些拥堵。而使用 token 之后这些问题都迎刃而解,因为 token 自己 hold 住了用户的验证信息。

2. 安全性

  1. 在整个过程中是没有用户名和密码的传递的,不会存在密码被盗用的风险;
  2. 对于自己的系统来说,不会让第三方公司知道自己的加密策略的加密手段,因为生成 token 和验证 token 的过程都是在自己系统上进行,第三方系统并不关心这个过程是如何进行的,只需要返回一个验证结果就行了。
  3. 比较担心的是如果 token 可以从别的地方(如浏览器的 cookie 中)被拦截获取,就可以用来冒充登录了呢?分情况讨论吧:
    1. 首先一般这个 token 是一串很长的字符串,凭肉眼记忆几乎是不可能的,被盗的情况应该是这台电脑中病毒,从而请求被拦截并获取盗这些参数。对于内网环境、或者安全级别比较高的办公环境来说,这种可能性很小;
    2. token 往往具有时效性、一般有效期在 2~3 分钟(每个厂子的安全策略不同,控制的时间也不同),即使被拷贝给其他人,很快也会失效;
    3. 更高级的做法,就是 One-Time Token(一次性令牌),即 token 只能检验一次,然后就会被回收,这样几乎不存在泄露的问题。

3. 多平台、跨域

CORS(跨域资源共享),对应用程序和服务进行扩展的时候,需要介入各种各种的设备和应用程序。只要用户有一个通过了验证的 token,数据和资源就能够在任何域上被请求到。

4. 基于标准

创建 token 的时候,你可以设定一些选项,标准的用法会在 JSON Web Token 体现,它支持众多的语言。这意味在未来的使用中你可以真正地转换你的认证机制。

Token 的应用场景

  1. 身份验证
  2. 单点登录:单点登录(Single Sign On)简称为 SSO,在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
  3. Anti CSRF(防跨站点请求伪造):防止别的站点伪造你的请求。
  4. 防止表单重复提交:解决方案可以是将 session 和 token 套用。首先 Session 可以始终保证请求是来自同一个对象,而不是多个对象,而在服务器端第一次验证 token 相同后,会将 session 中的 token 值更新下,若用户重复提交,第二次的验证判断将失败,因为用户提交的表单中的 token 没变,但服务器端 session 中 token 已经改变了。

 

Cookie、Session、Token

原文:https://www.cnblogs.com/juno3550/p/14380417.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!