動態

詳情 返回 返回

PHP實現單用户登錄 - 動態 詳情

原理:同一賬號在多個設備上登錄,前者被後者頂下線;假設賬號在設備A登錄,該賬號又在設備B登錄,此時設備A登錄的賬號被頂下線

思路分析

1、用户登錄成功後將當前時間存入session中,以及製作個token值存入該用户數據庫中;

2、在驗證用户是否登錄的模塊中,若用户已登錄,將用户數據庫中的token取出,並且製作一個最新的token,兩者判斷是否相等,若不相等,用户下線;

代碼實現

1、在登錄成功的代碼模塊下操作;

// 登錄驗證
$user = DB::table('user')->where(['username' => 賬號, 'password' => 密碼])->first();

if ($user) {
   # 登錄成功

    $time = time();

    $token = md5($user['id'].$time); // 製作 token 用md5加密

    DB::table('user')->where(['id'=>$user['id']])->update(['token' => $token]);//將token存入當前用户數據中

    session(['token_time'=>$time]);//將當前時間存入session中

    session(['user'=>$user]);//將用户信息存入session中

} else {
   # 登錄失敗邏輯處理
}

2、在判斷用户是否已經登錄的代碼模塊下操作;

$userInfo = session('user');//從session中獲取用户信息

if ($userInfo) {
   # 存在用户信息

    $token_time = session('token_time');//從session中獲取time

    $last_token = md5($userInfo['id'].$token_time);//製作當前的token值

    $token=DB::table('user')->where('id', $userInfo['id'])->value('token');//獲取該用户數據中的token

    if($last_token!=$token){
        //若當前的token值與數據中的token值不相等,則將用户信息清空,用户被頂下線
        $userInfo=null;
    }

}else{
   # 不存在用户信息邏輯處理(跳轉到登錄界面)
}

最後

覺得文章不錯的,給我點個贊哇,關注一下唄!
技術交流可關注微信公眾號【GitWeb】,加我好友一起探討
微信交流羣:加好友(備註思否)邀你入羣,抱團學習共進步

圖片

user avatar aitaokedemugua 頭像 honwhy 頭像 alibabawenyujishu 頭像 haoqidewukong 頭像 yelloxing 頭像 leexiaohui1997 頭像 huajianketang 頭像 banana_god 頭像 imba97 頭像 bugDiDiDi 頭像 aresn 頭像 yulong1992 頭像
點贊 58 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.