用户通过在单点登录服务器登陆,登录成功后,单点登录服务器分配给该用户一个ticket。然后单点登录服务器将该ticket做为key,用户名做为value,存储在redis中。通过判断该key是否是有效的来判断该用户会话有效。
后续会有服务通过向单点登录服务器发送一个ticket来验证该ticket是否有效,来判断该用户是否登录了。
但是这样会有个问题,某个用户肯能不停的登录,这样单点登录服务器每次都会将该ticket存储在redis中,虽然该ticket有过期时间,但有可能在短时间内在redis中写入大量的ticket。
不知这个有什么好的解决方法吗?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
如果你说的是接口遭到恶性调用的话,就属于DDOS防护方面的了,我的回答也就不适用了。
其实你的问题只要做过这个功能的都会遇到,就是如果判断用户已经登录,说使用cookie和session的肯定是没具体做过,这里涉及的是不同浏览器登录的情况,cookie和session都是没用的。
我当时的做法是在redis中再维护一个关系:用户名-->ticket,这样就可以根据用户名找到之前的ticket,也就可以判断出用户是否重复登录了。
个人先答一下,登陆的时候增加验证码,增加机器登录的难度。这个算一种方法,不知到是否还有其他方法?
登录以后ticket在用户端应该有记录吧 或走session或走cookie 那么退出登录时服务端拿到ticket去清空即可 或者用户重复登录时 服务端也可拿到上一次的ticket 来决定是否销毁 再一种就是以用户id为key value存ticket
已经登陆了,为啥你还要让他再登陆呢,逻辑就有问题啊?