web身份验证之 cookie、session、token

273 阅读3分钟

总的来说,cookiesessiontoken 都是用来保存用户登录信息的。三者是有区别的,使用场景也有所不同。

  • cookie 主要用于客户端存储少量的用户信息,由浏览器自动进行管理
  • session 主要用于服务器存储和管理用户会话状态信息,适用于在会话期间需要保持状态的情况
  • token 主要用于无状态的身份验证和授权,适用于 API 身份验证与跨平台的情况

cookie 和 session 经常搭配着一起来使用

image.png

用户输入登录信息后,点击登录,浏览器会携带着用户的信息向服务器发送请求。服务器收到请求后,会对比存储在服务器的信息,验证信息是否正确。正确就会创建一个 session ,并将用户信息存储在 session 当中,然后会把这个 sessionID 放在set-cookie 响应头中,响应给浏览器。 浏览器收到响应后,会把该 cookie 存下来。并在后续的请求中,携带该 cookie 向服务器表明身份。

cookie 优点:

  • 简单易用:只需通过设置响应头部的Set-Cookie字段即可在客户端创建和管理Cookie。
  • 前端可控性:由于Cookie存储在浏览器中,前端可以通过读写Cookie来实现一些前端逻辑,例如保持登录
  • 广泛支持:几乎所有浏览器都支持 cookie

cookie 缺点:

  • 存储容量有限:Cookie的存储容量通常有限(一般为4KB),过大的数据无法存储在Cookie中。
  • 安全性问题:Cookie中的数据可以被客户端篡改或窃取,可能导致安全问题。可以通过设置Cookie的安全属性来提高安全性。
  • 隐私问题
  • 跨域限制

session 优点:

  • 存储容量大
  • 数据安全性高
  • 可以处理一些复杂逻辑:由于Session存储在服务器端,相比于Cookie,可以处理一些复杂的逻辑,例如可以保持全局状态、锁定并发访问等。

session 缺点:

  • 服务器资源消耗大:由于Session是存储在服务器端的,对于大量的用户请求,将会消耗服务器的资源,需要充分考虑服务器的负载。
  • 可扩展性差:难以在分布式场景下扩展,由于Session的存储是在服务器端完成的,如果需要多台服务器协同工作,则需要采用共享Session或持久化Session等技术。

token

token 通常指的是一种用于身份验证和授权的令牌。它是一种短暂的字符串,用于证明用户身份或授予特定权限。

token 是由服务器生成的,发送给浏览器。浏览器收到后会进行保存!并在后续请求中,把它放到授权头Authorization: token】中去!

token 工作流程

  • 浏览器向服务器发送登陆请求

  • 服务器验证通过后,就生成 token ,并把 token 响应给浏览器

    • 在传输的过程中会进行加密!
  • 浏览器把 token 存储在本地,并在后面的请求中带上它

  • 当用户注销时,需要手动把 token 从本地删除

token 优点:

  • 安全性:token 是随机生成的,而且 token 不涉及敏感信息的传输,并且在传输的过程中进行了加密,所以减少了信息被截获、篡改的可能性。
  • 无状态性:token 是无状态的,服务器不需要存储用户的会话信息或状态

token 缺点:

  • 不可注销性: 一旦 token 生成并发送给浏览器后,就无法控制它使它失效了,所以如果涉及到需要 token 立马失效的,可能就需要使用其他机制。所以大部分服务器都会把 token 的有效期设置的较短!