• 单点登录和分布式登入用户状态储存


    session

    http协议是面向无状态无连接的,所以当用户登入之后需要用session记录用户的登入状态,服务端储存一个session,用户端也存放一个cookie,其中存放sessionID

    当用户再次访问时,根据session可以判断用户登录状态以及用户信息。

    在单点登录状态下,只有一台服务器。

    当多台服务器出现时,会出现nginx来进行分发请求,进行负载均衡,就会出现问题,此时一个服务器存储着用户的session,而其他服务器没有存储用户的session。当用户请求过来时,通过nginx将不同用户的请求分发到不同的服务器上面,此时就会出现其他服务器没有用户session。

    解决办法:

    一,session黏贴:将对应客户端ip的请求只打到对应的服务器。缺点:分布式系统的好处就在于,一台服务器挂了可以把请求打到其他服务器上面。这样的话,这台服务器挂了,这个客服端的登入信息就会消失。

    二,将session同步到其他服务器上。缺点:可能出现同步不及时,此时用户请求已经过来,但是这个服务器还没有同步过来,将会出现判断用户未登入。而重新生成新的session。这时复制的session也过来了,就会出现session混乱、

    三,将session放到redis上面集中存储。缺点:服务器越来越多,造成redis压力很大

    基于无状态的token方式

    有用户请求请求到nginx,nginx将请求放到服务器上面,在服务器上面登录后会生成一个token,这个token会保存用户的全部信息,将这个token返回给用户,这样不在服务器上面存放用户信息,服务器的状态变化就对用户没有影响

    缺点:用户信息全部放在用户端,可能会造成用户信息的泄露。
    网络传输不安全可能会造成用户信息的泄露
    解决办法:中间加一个层

    综上
    单点登入会选择session
    分布式情况会选择token

  • 相关阅读:
    [机器学习] 监督学习和无监督学习
    内存与CPU:计算机默契交互的关键解析
    【PAT甲级】1124 Raffle for Weibo Followers
    Firefoo:Firebase Cloud Firestore——GUI工具
    安装docker
    【Unity入门计划】Collision2D类&Collider2D类
    MySql第三篇---索引的创建与设计原则
    maven的pom没有指定包的版本
    pdd.order.basic.list.get订单基础信息列表查询接口(拼多多店铺订单列表查询接口)代码对接教程
    SSH 与 SSM
  • 原文地址:https://blog.csdn.net/mysnsds/article/details/126307743