cookie、session、token 的使用区别

/ 2评 / 5
内容纲要

互联网发展史

http是一个无状态协议,即本次请求与上一次请求没有任何联系,但随着互联网的发展,比如在线购物网站,等需要登录的网站,面临着管理会话问题,需要记录那些人登录系统,哪些人往自己购物车添加商品,因为http请求是无状态的,所以会话标识(session id)应运而生。那么session,cookie和token究竟是什么?

cookie

Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。Cookie存储的数据量有限,且都是保存在客户端浏览器中。不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用Cookie实际上只能存储一小段的文本信息。==cookie 存储在客户端并且不可跨域。==

基于cookie 的验证流程
  1. 用户登录,属于账号密码
  2. 服务器验证用户账号密码正确,创建一个 session 存储在数据库(或者 redis)
  3. 将 session ID 放进 cookie 中,被存储在用户浏览器中
  4. 再次发起请求,服务器直接通过 session ID 对用户进行验证
  5. 一旦用户登出,则 session 在客户端和服务器端都被销毁
cookie的组成
  1. key: 名称
  2. value: 值
  3. Domain:域,表示当前cookie所属于哪个域或子域下面。对于服务器返回的Set-Cookie中,如果没有指定Domain的值,那么其Domain的值是默认为当前所提交的http的请求所对应的主域名的。比如访问 http://www.example.com,返回一个cookie,没有指名domain值,那么其为值为默认的www.example.com
    4.Path:表示cookie的所属路径。
  4. Expire:time/Max-age:表示了cookie的有效期。expire的值,是一个时间,过了这个时间,该cookie就失效了。或者是用max-age指定当前cookie是在多长时间之后而失效。如果服务器返回的一个cookie,没有指定其expire time,那么表明此cookie有效期只是当前的session,即是session cookie,当前session会话结束后,就过期了。对应的,当关闭(浏览器中)该页面的时候,此cookie就应该被浏览器所删除了。
  5. secure:表示该cookie只能用https传输。一般用于包含认证信息的cookie,要求传输此cookie的时候,必须用https传输。
  6. httponly:表示此cookie必须用于http或https传输。这意味着,浏览器脚本,比如javascript中,是不允许访问操作此cookie的。
Set-Cookie: lu=Rg3vHJZnehYLjVg7qi3bZjzg; Expires=Tue, 15 Jan 2013 21:47:38 GMT; Path=/; Domain=.169it.com; HttpOnly
Set-Cookie: made_write_conn=1295214458; Path=/; Domain=.169it.com
Set-Cookie: reg_fb_gate=deleted; Expires=Thu, 01 Jan 1970 00:00:01 GMT; Path=/; Domain=.169it.com; HttpOnly
Cookie的缺陷

Session

session 是另一种记录服务器和客户端会话状态的机制
session 是基于 cookie 实现的,session 存储在服务器端,sessionId 会被存储到客户端的cookie 中。
Session会话,代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续。
cookie中存放着一个sessionID,请求时会发送这个ID;
session因为请求(request对象)而产生;
session是一个容器,可以存放会话过程中的任何对象;
session的创建与使用总是在服务端,浏览器从来都没有得到过session对象;
session是一种http存储机制,目的是为武装的http提供持久机制。

sequenceDiagram
客户端->>服务器: 第一次请求
服务器-->>客户端: 返回sessionID
客户端->>服务器: 第二次请求 携带cookie 中的 SessionID
session 认证流程
cookie 与 session 的区别

token

Token

Token的意思是“令牌”,是用户身份的验证方式。Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示
Token的定义:==Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。==

Token的组成
Token特点
token 的身份验证流程
sequenceDiagram
客户端->>服务端:username && password 
服务端-->>客户端: 返回token
客户端->>服务端:请求时携带token
服务端-->>客户端: token 认证成功,返回数据
Refresh Token

refresh token 是专用于刷新 access token 的 token。如果没有 refresh token,也可以刷新 access token,但每次刷新都要用户输入登录用户名与密码,会很麻烦。有了 refresh token,可以减少这个麻烦,客户端直接用 refresh token 去更新 access token,无需用户进行额外的操作。

Refresh Token 认证流程
sequenceDiagram
客户端->>服务端:username && password 
服务端-->>客户端: account token 一周,refresh token 一月
客户端->>服务端: account token
服务端-->>客户端: token 认证成功(没过期),返回数据。
客户端->>服务端: account token
服务端-->>客户端: 返回错误 account 过期,refresh token 未过期。
客户端->>服务端: refresh token
服务端-->>客户端: refresh token 未过期,返回新的 refresh token account token
服务端-->>客户端: refresh token 过期,重新登录注册
注意:
cookie和token的区别
session 和token 区别

JWT

什么是JWT

JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案

JWT的特点
JWT的原理
sequenceDiagram
浏览器->>服务器: 输入用户名密码进行登录
服务器-->>浏览器: 使用秘钥创建JWT 把JWT 返给客户端
浏览器->>服务器: 请求头中携带 jwt
服务器-->>浏览器: 返回数据
Token 和 JWT 的区别

相同:

不同

参考文献:

2条回应:“cookie、session、token 的使用区别”

  1. 匿名说道:

    get到

  2. 匿名说道:

    学到了

发表评论

电子邮件地址不会被公开。