当前位置:首页 > CMS教程 > Thinkphp > 列表

tp5框架使用cookie加密算法实现登录功能示例

发布:smiling 来源: PHP粉丝网  添加日期:2022-02-10 09:53:44 浏览: 评论:0 

本文实例讲述了tp5框架使用cookie加密算法实现登录功能,分享给大家供大家参考,具体如下:

首先,我们为什么要对cookie加密?

之所以要对cookie加密是以为cookie是保存在客户端的,稍微懂一点技术的人都能找到cookie的保存位置,如果我们保存cookie的时候没有加密,而是明文保存的话也就是说我们的用户名和密码就完全暴露了,这是一个非常大的安全隐患,所以必须加密cookie。

其次,我们不管要对cookie加密,还要考虑到当我们使用的时候要对加密后的cookie进行解密处理,得到正确的用户名和密码后才能做自动登录一类的功能,下面看看我们的加密方案:

1:在配置文件config中添加

'encryption_key'     =>'d441d33a65d31dbf0a8016a85c71a5b3',

tp5框架使用cookie加密算法实现登录功能示例

2:在common文件中添加

tp5框架使用cookie加密算法实现登录功能示例

  1. //type 0:加密 1:解密 
  2. function encryption($value,$type=0){ 
  3.   $key=config('encryption_key'); 
  4.   if($type == 0){//加密 
  5.    return str_replace('='''base64_encode($value ^ $key)); 
  6.   }else
  7.    $value=base64_decode($value); 
  8.    return $value ^ $key
  9.   } 

3:在模型中加密代码

  1. public function login($data,$type=0){ 
  2.    $userData=array(); 
  3.    $userData['username']=trim($data['username']); 
  4.    $userData['password']=md5($data['password']); 
  5.    //验证用户名或邮箱或手机号是否存在 
  6.    $users=db('user')->where(array('username'=>$userData['username']))->whereOr(array('email'=>$userData['username']))->whereOr(array('mobile_phone'=>$userData['username']))->find(); 
  7.    // dump($users); die; 
  8.    if($users){ 
  9.      if($users['password'] == $userData['password']){ 
  10.        session('uid',$users['id']); 
  11.        session('username',$users['username']); 
  12.        //写入会员等级及折扣率 
  13.        $points=$users['points']; 
  14.        $memberLevel=db('member_level')->where('bom_point','<=',$points)->where('top_point','>=',$points)->find(); 
  15.        session('level_id',$memberLevel['id']);//等级id 
  16.        session('level_rate',$memberLevel['rate']);//等级折扣率 
  17.        //写入cookie 
  18.        if(isset($data['remember'])){ 
  19.          $aMonth=30*24*60*60; 
  20.          $username=encryption($users['username'],0); 
  21.          $password=encryption($data['password'],0); 
  22.          cookie('username'$username$aMonth'/'); 
  23.          cookie('password'$password$aMonth'/'); 
  24.        } 
  25.        $arr=[ 
  26.          'error'=>0, 
  27.          'message'=>""
  28.        ]; 
  29.        if($type == 1){ 
  30.          return $arr
  31.        }else
  32.          return json($arr); 
  33.        } 
  34.      }else
  35.        $arr=[ 
  36.        'error'=>1, 
  37.        'message'=>"<i class='iconfont icon-minus-sign'></i>用户名或者密码错误"
  38.        'url'=>''
  39.        ]; 
  40.        if($type == 1){ 
  41.          return $arr
  42.        }else
  43.          return json($arr); 
  44.        } 
  45.      } 
  46.    }else
  47.      $arr=[ 
  48.      'error'=>1, 
  49.      'message'=>"<i class='iconfont icon-minus-sign'></i>用户名或者密码错误"
  50.      'url'=>''
  51.      ]; 
  52.      if($type == 1){ 
  53.        return $arr
  54.      }else
  55.        return json($arr); 
  56.      } 
  57.    } 
  58.  } 

4:在控制器中解密代码

  1. public function checkLogin(){ 
  2.    $uid=session('uid'); 
  3.    if($uid){ 
  4.      $arr['error']=0; 
  5.      $arr['uid']=$uid
  6.      $arr['username']=session('username'); 
  7.      return json($arr); 
  8.    }else
  9.      if(cookie('username') && cookie('password')){ 
  10.        $data['username']=encryption(cookie('username'),1); 
  11.        $data['password']=encryption(cookie('password'),1); 
  12.        $loginRes=model('user')->login($data,1); 
  13.        if($loginRes['error'] == 0){ 
  14.          $arr['error']=0; 
  15.          $arr['uid']=$uid
  16.          $arr['username']=session('username'); 
  17.          return json($arr); 
  18.        } 
  19.      } 
  20.      $arr=array(); 
  21.      $arr['error']=1; 
  22.      return json($arr); 
  23.    } 
  24.  }

Tags: tp5加密算法 cookie

分享到: