服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - PHP教程 - tp5框架使用cookie加密算法实现登录功能示例

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

2020-07-04 14:18pan_yuyuan PHP教程

这篇文章主要介绍了tp5框架使用cookie加密算法实现登录功能,结合实例形式分析了thinkPHP5使用cookie加密算法的原理及登录功能相关操作技巧,需要的朋友可以参考下

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

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

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

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

1:在配置文件config中添加

?
1
'encryption_key'     =>'d441d33a65d31dbf0a8016a85c71a5b3',

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

2:在common文件中添加

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

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

3:在模型中加密代码

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

4:在控制器中解密代码

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

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

原文链接:https://blog.csdn.net/pan_yuyuan/article/details/81875917

延伸 · 阅读

精彩推荐