129 會員同一賬號,限制只在同一臺電腦裝置上單點登入,新登入後原登入會自動退出

phpstory發表於2018-09-12

比如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");
        }

https://blog.csdn.net/weixin_40047834/article/details/80938168

更多內容歡迎關注微信訂閱號:phpstory 

相關文章