如何设计一个帐户只能一个终端登陆?

如题:
我自己的逻辑:
1.在用户表中新增一个字段 is_online(是否已登陆 0 未登陆 1登陆)
2.登陆时判断此字段是否为1 ,退出时,更新此字段为0

如果用户非正常退出的情况 (关闭浏览器等) 这个情况就会没办法更新is_online字段

目前想到一个方法:但是没有完全理解

就是将session_id存入数据库 登陆时判断数据库中的session_id 在服务器中是否存在?

这个具体如何操作 请教一下

阅读 3.2k
6 个回答

每次登录都生成一个用户user_id与相对的token,保存到数据库里。每次接口请求之前判断这个token是否有效,重新登录后token发生变化,之前登录的token验证就失效了,从而实现一个帐户只能一个终端登陆。

每次登陆后生成一个有时效token,保存在服务器端和客户端,每次鉴权时只验证这个token
这样新的登录事件发生后,由于token改变,以前的有效登录就自动失效了

登陆时,将session_id存入数据库 鉴权时判断 数据库中的session_id在服务器中是否还存在

通过session_save_path()获取session_id在服务器中的目录路径

//判断数据库中用户是否登陆
if($admin['is_online']) {
    //如果用户非正常退出时, 判断session_id是否存在 如果存在 提示已经登陆 ( session默认30分钟失效)
    if(file_exists(session_save_path().'\\'.$admin['session_id'])) {
        ajaxmsg('此账号已在其它地方登陆,请先退出后再登陆',0);
    }
}
新手上路,请多包涵

我们网站是用的memcache共享session做到的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题