redis - php如何保证同一用户最多在一个session中保持登录?
程序员文章站
2022-05-22 07:59:51
...
目前做的都是可以同时在线,改了密码之后不同设备登录的没有下线,如何保证改密码以后所有的session全部清空掉?以及有登录状态的就不能再登录或者前一个下线。像QQ这样说怎么实现的?
回复内容:
目前做的都是可以同时在线,改了密码之后不同设备登录的没有下线,如何保证改密码以后所有的session全部清空掉?以及有登录状态的就不能再登录或者前一个下线。像QQ这样说怎么实现的?
qq 就是及时通讯.
如果是 php, 建议给登陆一个 token , 每次登陆这个 token 都会变. 这样旧的 session 里存的 token 就过期不存在了, 你就让另外一个登陆状态退出就行了.
大概就像楼上朋友说得那样。在redis中建个hash,key是用户id,value是token,更改密码后,更新这个value
补充下 他们提供的思路中少了一个心跳机制 每个客户端都要把当前的token发送给服务端 对比 过期的全部踢除
Redis里,用户的ID作为键,用户的密码哈希作为值.
这个密码哈希根据后端关系数据库用户计算出来,放到Redis缓存.
用户修改密码时,更新Redis的密码哈希.
这样cookie认证时,比对密码哈希,不一致自然cookie就是失效了.
login
成功的时候,把sessionID
存到数据库或者其它缓存,sessionId
最多存在一个
判断用户是否登陆,依据就是这个sessionId
这样的话,产生第二次登陆,前一次登陆的session
就会失效