用户登录成功以后,假设用户一个小时以后重新登录,只带着sessionId访问即可。用户退出登录时,需要将数据库表中的sessionId清空。在登录的时候,将要判断SessionId是否为空。貌似还要判断一下是否更换了手机。
但是用户如果是非正常退出(比如手机关机,卸载软件,断网等)此时数据库的表sessionId没有清空。
那该如何办呢?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
下次登录的时候检查一下,如果是另一个手机就把之前的session标记为无效;如果有session但是已经失效就清除此session并要求用户重新登录。
session本身在服务器段可以设定一个expiration,定期清除太长时间没有活跃的session可以节省一些服务器资源,但是这个expiration不能太短,否则经常提示用户登录会严重影响用户体验,具体时间要取决于用户平均活跃间隔,一般把这个时间乘上几倍就差不多了。
一般来说移动端不会让用户经常的去登录,所以用户非正常退出的时候你本来就不应该去清楚sessionId,你可以试试看你重启之后手机qq、微信会不会让你重新登录。所以你的问题根本不存在。
一个小时之后用户打开你的应用不应该要重新登录了,而是可以拿着某个token/sessionId去直接获取服务了。每次重新登录的时候重新生成新的token/sessionId自然就保证单点登录了。
当然你要防止用户的token被拿到多台设备上通过hack的方式使用,解决方案应该有很多的。
这个是典型的单点登录问题,需要做的是在登录时给每用户生成一个唯一token,客户端请求数据时需携带token标识当前用户,当此帐号在其他设备登录时重新生成token。原来的token就失效了,这样他在原来的设备请求数据时因为token失效让它重新登录。这样就实现了单点登录。