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下删除字符串中HTML标签的函数
Aug 27 PHP
PHP取得一个类的属性和方法的实现代码
May 22 PHP
php 抽象类的简单应用
Sep 06 PHP
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
Aug 09 PHP
解析zend Framework如何自动加载类
Jun 28 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
Sep 23 PHP
PHP根据两点间的经纬度计算距离
Oct 31 PHP
php实现excel中rank函数功能的方法
Jan 20 PHP
PHP制作百度词典查词采集器
Jan 29 PHP
浅谈PDO的rowCount函数
Jun 18 PHP
php in_array() 检查数组中是否存在某个值详解
Nov 23 PHP
PHP网页安全认证的实例详解
Sep 28 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一些有意思的小区别
2006/12/06 PHP
实用PHP会员权限控制实现原理分析
2011/05/29 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
2015/12/24 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
2009/11/27 Javascript
Jquery Ajax请求代码(2)
2011/01/07 Javascript
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
2013/01/04 Javascript
node.js 开发指南 ? Node.js 连接 MySQL 并进行数据库操作
2014/07/29 Javascript
jquery遍历标签中自定义的属性方法
2016/09/17 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
js+html5实现复制文字按钮
2017/07/15 Javascript
Vue.js 踩坑记之双向绑定
2018/05/03 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
小程序自定义日历效果
2018/12/29 Javascript
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
2019/05/20 Javascript
javascript 原型与原型链的理解及实例分析
2019/11/23 Javascript
Vue组件通信入门之Provide和Inject机制
2019/12/29 Javascript
vue:el-input输入时限制输入的类型操作
2020/08/05 Javascript
Python3如何解决字符编码问题详解
2017/04/23 Python
分析Python读取文件时的路径问题
2018/02/11 Python
用 Django 开发一个 Python Web API的方法步骤
2020/12/03 Python
奥地利网上书店:Weltbild
2017/07/14 全球购物
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
欧姆龙医疗保健与医疗产品:Omron Healthcare
2020/02/10 全球购物
Abbott Lyon官网:女士手表、珠宝及配件
2020/12/26 全球购物
毕业生怎样写好自荐信
2013/11/11 职场文书
电气技术员岗位职责
2013/11/19 职场文书
高中生学习的自我评价
2013/12/14 职场文书
征婚广告词
2014/03/17 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
公证处委托书
2015/01/28 职场文书
高一化学教学反思
2016/02/22 职场文书
python如何获取网络数据
2021/04/11 Python