Cookie、Session和Token

目录

前言

Session

有了 Cookie 为什么还要 Session?

Cookie和Session的区别

Token


前言

HTTP 是一种无状态协议。因为HTTP底层是TCP,是一个长连接,这个过程中是保持连接状态的。在这个连接过程中,客户端可以向服务器发送多次请求各个请求之间没有什么联系。每次服务器接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录

客户端请求服务器时,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie并在响应中带有Set-Cookie报头。而客户端浏览器会把Cookie保存起来。当浏览器再请求服务器时浏览器把请求的网址连同该Cookie一同提交给服务器服务器通过检查该Cookie来获取用户状态

  • Session Cookies:会话 Cookie 存储在内存中,永远不会写入磁盘,当浏览器关闭时,此后 Cookie 将永久丢失。
  • Persistent Cookies:Cookie 包含有效期,则将其视为持久性 Cookie。在到期指定的日期,Cookie 将从磁盘中删除。

使用 cookie 时存在的问题:

  • 不安全,不要存储敏感数据,比如用户密码,账户余额,因为存储在客户端,容易被客户端篡改,使用前需要验证合法性;
  • 能存储的数据量不能超过 4kb
  • 有数量限制,一个浏览器针对一个网站最多存 20 个Cookie,浏览器一般只允许存放 300 个Cookie;
  • 移动端对 cookie 的支持不是很好,而 session 需要基于 cookie 实现,所以移动端常用的是 token;
  • cookie为不可跨域的:每个 cookie 都会绑定单一的域名,无法在别的域名下获取使用;

Session

session 是另一种记录服务器和客户端会话状态的机制。session 是基于 cookie 实现的,session 存储在服务器端,可以理解为一个状态列表,他拥有一个唯一识别符号sessionId,通常存放于cookie中。

session认证流程:

  • 首先,浏览器客户端会发送一个http请求到服务器端;
  • 服务端接收请求后,创建对应的 session,并发送一个http响应到客户端,这个响应头中就包含 Set-Cookie 头部。该头部包含了sessionId
  • 浏览器接收到服务端返回的 sessionId 后,将信息存入 cookie,同时cookie记录此 SessionID 属于哪个域名;
  • 当用户第二次发起请求时,请求会自动判断此域名下是否存在 Cookie 信息,如果存在浏览器会自动在请求头中添加 cookie 发送到服务端;
  • 服务端接收请求,会从 Cookie 中获取 sessionId,再根据 sessionId 查找对应的 Session 信息,如果没有找到说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作;

使用 session 存在的问题:

  • session 存储在服务器里面,这些 session 会占据较多的内存,需要在服务端定期的去清理过期的 session
  • 移动端对 cookie 的支持不是很好,而 session 需要基于 cookie 实现,所以移动端常用的是 token
  • 扩展性不好:例如互联网公司为了可以支撑更大的流量,后端往往需要多台服务器共同来支撑前端用户请求,那如果用户在 A 服务器登录了,第二次请求跑到服务 B 就会出现登录失效问题。

有了 Cookie 为什么还要 Session?

  • 使用 session 只需要在客户端保存一个 sessionId,实际上大量数据都是保存在服务端。如果全部用 cookie,数据量大的时候客户端是没有那么多空间的( 单个 Cookie 保存的数据不能超过 4K,Session 可存储数据远高于 Cookie)。
  • 全部在客户端保存服务端无法验证,这样伪造和仿冒会更加容易
  • 全部保存在客户端,那么一旦被劫持,全部信息都会泄露;
  • 客户端数据量变大,网络传输的数据量也会变大;

Cookie和Session的区别

  • 存储位置不同cookie 数据存放在客户的浏览器上session 数据放在服务器上;
  • 安全性不同cookie 不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
  • 存取值的类型不同cookie 只支持存字符串数据session 可以存任意数据类型
  • 有效期不同cookie 可设置为长时间保持,比如我们经常使用的默认登录功能,session 一般失效时间较短,客户端关闭或者 session 超时都会失效。
  • 存储大小不同:单个 cookie 保存的数据不能超过 4Ksession 可存储数据远高于 cookie;

Token

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

Json Web Token

由于cookie和session都是不支持跨域请求的,因此此处引入了,JWT(Json Web Token)。

JSON Web Token 入门教程 - 阮一峰的网络日志

参考:
五分钟搞懂 Session、Cookie和Token - 掘金
聊一聊session和cookie - 掘金
Cookie和Session详解 - 掘金
看完这篇 Session、Cookie、Token,和面试官扯皮就没问题了 - 掘金

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值