日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用户登录,token验证开发(含过期时间)

發(fā)布時間:2024/9/19 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用户登录,token验证开发(含过期时间) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

其實所謂的token,就是一串加密的字符串

需求:用戶登錄訪問頁面后,在未退出登錄賬號的情況下,再次訪問頁面無需再次登錄

首先我們拋開過期時間不管

設(shè)計思路:主要是前端有個緩存可以存取一些信息一段時間,所以

  • 在注冊時生成一串加密好的數(shù)字,連同用戶信息一起添加到數(shù)據(jù)庫的用戶表中,token字段必須唯一
  • 用戶登錄成功,查詢出這個用戶的token返回給前端保存起來
  • 用戶再次登錄時,前端把保存起來的token傳給后端,后端驗證無誤后,讓用戶無需再次輸入賬號密碼登錄就能訪問頁面
  • ?

    ?

    ?

    ?

    假如需求是注冊成功后自動登錄 ,則在注冊接口添加用戶信息成功后再根據(jù)用戶賬號查詢出用戶token返回給前端,和上圖圖2方法一樣

    接下來是做token的有效期

    首先得知道為什么要做token有效期。假如token生成后就一直不變,那么有一天被不速之客在前端頁面獲取到了用戶的token,那么他則可以為所欲為了。所以為了防止token泄漏,我們得為token做一個有效期,一般為三天,如果用戶三天都沒有登錄過,那么我們得讓用戶重新登錄一下

    主要是想好在哪里插入和更新token的有效期:

  • ?在用戶注冊的時候插入token的有效期
  • 在用戶登錄的時候更新token的有效期和token
  • 用戶每次訪問頁面時,判斷token有效期是否過期:未過期則只更新token有效期,過期則同時更新token有效期和token
  • 注:更新token有效期不一定要更新token哦!!過期或登錄時才同時token,變一下token,你懂的

    詳細(xì)代碼如下:

    //手機(jī)綁定public function mobileBinding($mobile, $verify,$company_name,$company_car_num,$linkman,$password){$admin_mode = AdminModel::getInstance();$company_model = CompanyModel::getInstance();$admin = $admin_mode->where(['phone' => $mobile])->find();if ($admin) {$this->displayByError('用戶已存在');}//驗證碼有效期$valid_time = ValidateModel::getInstance()->where(['phone'=>$mobile])->value('valid_time');if(strtotime($valid_time) < time()){//驗證碼過期了$data = array('verify' => sprintf('%04d',rand(0,9999)),'valid_time' => date("Y-m-d H:i:s",time()+600)//有效期10分鐘);ValidateModel::getInstance()->where(['phone'=>$mobile])->save($data);}$is_right = ValidateModel::getInstance()->where(['phone' => $mobile, 'verify' => $verify])->find();if (!$is_right) {$this->displayByError('驗證碼有誤');}$company = $company_model->where(['name' => $company_name])->find();if ($company) {$this->displayByError('公司名已注冊');}BaseModel::getInstance()->startTrans();try{//用戶表$data = array('username' => $mobile,'phone' => $mobile,'linkman' => $linkman,'password' => $password,'token' => md5(time() . rand(0, time())),'valid_time' => date('Y-m-d H:i:s',time()+259200),//token三天有效期'role_id'=>2,//商家);$admin_mode->add($data);$admin_id = $admin_mode->getLastInsID();//公司表$data2 = array('name' => $company_name,'car_num' => $company_car_num,'admin_id' => $admin_id);$company_model->add($data2);$company_id = $admin_mode->getLastInsID();$admin_mode->where(['phone' => $mobile])->save(['company_id'=>$company_id]);BaseModel::getInstance()->commit();//重新查詢一下,返回用戶信息$user = $admin_mode->where(['phone' => $mobile])->find();$this->displayByData($user);}catch (\Exception $e){BaseModel::getInstance()->rollback();}$this->displayByError();} //用戶登錄public function login($mobile, $password){$res = AdminModel::getInstance()->where(['phone' => $mobile])->find();if (!$res) {$this->displayByError('用戶不存在,請注冊');}$res2 = AdminModel::getInstance()->where(['phone' => $mobile, 'password' => $password])->find();if (!$res2) {$this->displayByError('密碼錯誤');}if ($res['is_stop'] != 1) {$this->displayByError('請聯(lián)系客服激活賬號');}$data = array('token' => md5(time() . $password . $mobile),'valid_time' => date('Y-m-d H:i:s',time()+259200),//token三天有效期);AdminModel::getInstance()->where(['phone'=>$mobile])->save($data);$user_info = AdminModel::getInstance()->where(['phone' => $mobile])->find();//重新查詢用戶信息$this->displayByData($user_info);//返回用戶信息給前端} class AdminLogin extends BaseController {protected $admin;protected $company_id;protected $admin_power;public function __construct(){parent::__construct();if($_REQUEST['debug']){$this->admin = AdminModel::getInstance()->where(['id'=>$_REQUEST['debug']])->find();if(!$this->admin){$this->displayByError("用戶不存在,請注冊");}}else{$token = $_REQUEST['admin_token']?$_REQUEST['admin_token']:0;$this->admin = AdminModel::getInstance()->adminInfo($token);//查詢用戶是否存在if(!$this->admin){$this->displayByError("請重新登錄",501);//兩個同時登錄,被頂下去了}if($this->admin['is_stop'] != 1){$this->displayByError('請聯(lián)系客服繳費(fèi)激活賬號');}//token三天有效期if(strtotime($this->admin['valid_time'])<time()){//過期$data = array('token' => md5(time() . $this->admin['password'] . $this->admin['phone']),'valid_time' => date('Y-m-d H:i:s',time()+259200),//token三天有效期);AdminModel::getInstance()->where(['phone'=>$this->admin['phone']])->save($data);$this->displayByError("認(rèn)證過期,請重新登錄",502);}$data = array('valid_time' => date('Y-m-d H:i:s',time()+259200),//token三天有效期);AdminModel::getInstance()->where(['phone'=>$this->admin['phone']])->save($data);}$this->company_id = $this->admin['company_id'];$this->filterData();} }

    ?good Luck!!

    ?

    與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

    總結(jié)

    以上是生活随笔為你收集整理的用户登录,token验证开发(含过期时间)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。