分布式环境下用户登陆信息存储问题,Session共享还是Cookie加密

单服务器下

方案

  • 直接采用Session存储用户登陆信息即可。

原理

  • 客户端访问登陆接口,服务器校验账号和密码通过后,把用户信息记录到Session中,并生成SESSION_ID返回给客户端,客户端保存SESSION_ID到Cookie中,之后每次请求都会带上SESSION_ID,服务器就知道客户端的身份了。

分布式服务器

方案一

  • 依然采用Session存储用户登陆信息,因为涉及多台服务器之间的Session共享,一般把Session存储到Redis中,Redis可采用集群来支持高可用。

方案二

  • 采用JWT(Json Web Token),服务器认证后,把用户信息保存成json对象,并用密钥进行加签名防止串改,发回给客户端。这样服务器是无状态模式,比较容易扩展。此方法是不加密的,注意不要保存隐私信息。
  • 客户端可以将JWT存储到Cookie中或者localstorage中(但是会有跨域的问题)。客户端和服务端每次通信都要带上JWT。
  • 将JWT放到http的header头中的Authorization字段里。另一种是放到post请求的body中
  • 默认不加密,可自行加密
  • 退出登陆时,要讲token扔入黑名单
  • 不要使用http,强烈建议使用https协议。
评论