PHP 会员同一账号,限制只在同一台电脑设备上单点登录,新登录后原登录会自动退出

比如a账号在a电脑或a浏览器上登录后,如果a账号又在b电脑登录,则a电脑上会自动检测并退出登录.
思路是点击登录后,把session或时间值保存在数据库或txt文本中,并同时保存在每个用户的浏览器中,如果账号在另一处登录,则更新数据库或txt中的sessionid值.
这时,只要实时比对浏览器中保存的session与数据库中的是否一致即可.
比如保存在会员id.txt中为例.
日志为 login_log/13.txt,里面保存sessionid的值.
其中13表示会员id ,另外,浏览器的session中保存用户的uid 比如13

   public function login() {
 if (is_login()) {
          $this->redirect('index/index');
        }
        $request = \think\Request::instance();
        //var_dump($request->isPost());exit;
        if ($request->isPost()) {
            $data = input('param.');
            $user = $data['username'];
            $pwd = $data['password'];
            $has = db('user')->where('username', $user)->find();
            (empty($has) || $has['password'] != md5($pwd)) && $this->error("用户名或密码错误");


    file_put_contents('login_log/'.$has['id'].'.txt',session_id());
                 session('uid', $has['id']);

            $this->success("登录成功", "index/index");
        } else {
            return view();
        }
    }

判断是否登录的函数为

function is_login(){
    $session_id=file_get_contents('login_log/'.session('uid').'.txt');

    if($session_id==session_id()){
        return session('uid');
    }else{
        return 0;
    }

}

在需要检测是否是登录状态的页面加上

 if (!is_login()) {
             $this->success("请重新登录", "publics/login");
        }

请打赏谢谢大佬

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值