动态

详情 返回 返回

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.