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相当简单的分页类
Oct 02 PHP
PHP中的cookie不用刷新就生效的方法
Feb 04 PHP
php安全之直接用$获取值而不$_GET 字符转义
Jun 03 PHP
php实现MySQL数据库备份与还原类实例
Dec 09 PHP
smarty缓存用法分析
Dec 16 PHP
yii使用activeFileField控件实现上传文件与图片的方法
Dec 28 PHP
PHP 闭包详解及实例代码
Sep 28 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 PHP
thinkPHP框架实现多表查询的方法
Jun 14 PHP
PHP后台实现微信小程序登录
Aug 03 PHP
PHP正则表达式函数preg_replace用法实例分析
Jun 04 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 冒泡排序 交换排序法
2011/05/10 PHP
PHP中使用break跳出多重循环代码实例
2015/01/21 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
js前台分页显示后端JAVA数据响应
2013/03/18 Javascript
jquery ajax 局部刷新小案例
2014/02/08 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
微信小程序实现点击页面出现文字
2020/09/21 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
[02:04]2016国际邀请赛中国区预选赛VG.R晋级之路
2016/07/01 DOTA
Python3 批量扫描端口的例子
2019/07/25 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
2020/04/03 Python
Python如何输出警告信息
2020/07/30 Python
详解CSS 3 中的 calc() 方法
2018/01/12 HTML / CSS
html5页面结构_动力节点Java学院整理
2017/07/10 HTML / CSS
古驰英国官网:GUCCI英国
2020/03/07 全球购物
Currentbody美国/加拿大:美容仪专家
2020/03/09 全球购物
求职自荐信范文格式
2013/11/29 职场文书
历史系自荐信范文
2013/12/24 职场文书
思想品德自我评价
2014/02/04 职场文书
《中国梦我的梦》大学生演讲稿
2014/08/20 职场文书
身边的榜样活动方案
2014/08/20 职场文书
代办出身证明书
2014/10/21 职场文书
防汛工作情况汇报
2014/10/28 职场文书
师德先进个人材料
2014/12/20 职场文书
置业顾问岗位职责
2015/02/09 职场文书
党员廉政准则心得体会
2016/01/20 职场文书
《红领巾真好》教学反思
2016/02/16 职场文书
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
2021/05/25 Python
怎么用Python识别手势数字
2021/06/07 Python