如何用php实现一个账号不能多个用户同时登录

这是知乎当中的一个问题,也是我注册了知乎之后,第一个回答的问题。提问者还提到,“要求:当某个账号登陆后,其它用户再登录该账号时,提示该账号已登陆。 因用户数量庞大,如何能高效实现?方法能详细具体点为好修改”

我给楼主做出了这样的答复:一个帐号成功登录之后,至少要做两件事情:1是在服务器端生成并保存session,2是在相关表中把用户登录状态从否改为是(例如user表中isonline从0改为1)。

按照楼主的想法,在做这两件事情之前,还应该做一件事情,是判断user表中isonline的值是0还是1,如果是0,则这是一个当前未登录系统的用户,这时开始做上边提到的两件事。如果是1,则是已经登录的用户,这时可以给出提示信息。

这个问题牵扯到了退出。如果用户正常点击退出按钮,则还是至少做两件事情:1是注销服务器端session,2是把相关表中的用户登录状态从是改为否(例如user表中isonline从1改为0)。

为了处理用户没有正常退出的情况,比如长时间无任何操作,或者直接关闭浏览器。也可以认为用户已经退出系统。长时间无任何操作,有时效性的session会自动注销(默认时间是似乎是20分钟);直接关闭浏览器,session也是自动注销。可以有一个定时执行的程序,来检查已经登录的用户的session是否不存在,如果不存在,则把user表中isonline从1改为0。

以上基本能解决楼主程序上的要求。

至于效率,PHP代码的效率,数据库的效率,带宽充裕,服务器稳定,负载均衡器…… 网站建设的各个方面有各自提高效率的方法。话题比较大,我回答不了,等待高人解答。

标签: , ,

留下回复