129 會員同一賬號,限制只在同一臺電腦裝置上單點登入,新登入後原登入會自動退出
阿新 • • 發佈:2018-12-09
比如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"); }