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


Posted in PHP onFebruary 10, 2020

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

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

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

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

1:在配置文件config中添加

'encryption_key'     =>'d441d33a65d31dbf0a8016a85c71a5b3',

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

2:在common文件中添加

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

//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:在模型中加密代码

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:在控制器中解密代码

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程序设计有所帮助。

PHP 相关文章推荐
PHP下打开URL地址的几种方法小结
May 16 PHP
php中的比较运算符详解
Oct 28 PHP
PHP输出当前进程所有变量/常量/模块/函数/类的示例
Nov 07 PHP
PHP把JPEG图片转换成Progressive JPEG的方法
Jun 30 PHP
分享php多功能图片处理类
May 15 PHP
Yii2设置默认控制器的两种方法
May 19 PHP
PHP中的函数声明与使用详解
May 27 PHP
php实现的redis缓存类定义与使用方法示例
Aug 09 PHP
PHPTree――php快速生成无限级分类
Mar 30 PHP
laravel清除视图缓存的代码
Oct 23 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
Feb 10 PHP
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
Apr 01 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
Feb 10 #PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
Feb 07 #PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
Feb 07 #PHP
PHP查找一列有序数组是否包含某值的方法
Feb 07 #PHP
php测试kafka项目示例
Feb 06 #PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
Feb 06 #PHP
PHP实现常用排序算法的方法
Feb 05 #PHP
You might like
php json转换相关知识(小结)
2018/12/21 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
Javascript document.referrer判断访客来源网址
2020/05/15 Javascript
入门基础学习 ExtJS笔记(一)
2010/11/11 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
2017/03/06 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
2018/09/03 Javascript
一个因@click.stop引发的bug的解决
2019/01/08 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
2019/07/07 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
2020/08/03 Javascript
浅谈vue项目,访问路径#号的问题
2020/08/14 Javascript
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
在Linux命令行终端中使用python的简单方法(推荐)
2017/01/23 Python
在Python中,不用while和for循环遍历列表的实例
2019/02/20 Python
python多线程同步之文件读写控制
2021/02/25 Python
python模块hashlib(加密服务)知识点讲解
2019/11/25 Python
python + selenium 刷B站播放量的实例代码
2020/06/12 Python
什么是python的必选参数
2020/06/21 Python
python与pycharm有何区别
2020/07/01 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
Pandas直接读取sql脚本的方法
2021/01/21 Python
优秀学生干部个人的自我评价
2013/10/04 职场文书
高一生物教学反思
2014/01/17 职场文书
情况说明书格式范文
2014/05/06 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
班子查摆四风个人对照检查材料思想汇报
2014/10/04 职场文书
2016春季运动会前导词
2015/11/25 职场文书
幼儿体育课教学反思
2016/02/16 职场文书
《三国志》赏析
2019/08/27 职场文书
python引入其他文件夹下的py文件具体方法
2021/05/23 Python
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server
Pillow图像处理库安装及使用
2022/04/12 Python