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 相关文章推荐
DedeCMS dede_channeltype表字段注释
Apr 07 PHP
centos 5.6 升级php到5.3的方法
May 14 PHP
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
Oct 08 PHP
PHP图片验证码制作实现分享(全)
May 10 PHP
逆序二维数组插入一元素的php代码
Jun 08 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
Jun 20 PHP
Codeigniter的一些优秀特性总结
Jan 21 PHP
php+mysqli事务控制实现银行转账实例
Jan 29 PHP
Symfony2创建页面实例详解
Mar 18 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
Apr 11 PHP
php实现的二叉树遍历算法示例
Jun 15 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
Oct 18 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中ob_flush函数和flush函数用法分析
2015/03/18 PHP
WordPress中的shortcode短代码功能使用详解
2016/05/17 PHP
细品javascript 寻址,闭包,对象模型和相关问题
2009/04/27 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
JS逆序遍历实现代码
2014/12/02 Javascript
jQuery实现表单提交时判断的方法
2014/12/13 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
js传值后台中文出现乱码的解决方法
2016/06/30 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
JS简单实现点击复制链接的方法
2016/08/03 Javascript
jquery表单验证插件validation使用方法详解
2017/01/20 Javascript
vue.js指令v-model使用方法
2017/03/20 Javascript
JS组件系列之MVVM组件构建自己的Vue组件
2017/04/28 Javascript
AngularJS实现的锚点楼层跳转功能示例
2018/01/02 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
Python Socket编程入门教程
2014/07/11 Python
基于Python的关键字监控及告警
2017/07/06 Python
Python列表删除的三种方法代码分享
2017/10/31 Python
python 使用 requests 模块发送http请求 的方法
2018/12/09 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
使用python编写一个语音朗读闹钟功能的示例代码
2020/07/14 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
2020/08/07 Python
英国著名药妆店:Superdrug
2021/02/13 全球购物
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
党校自我鉴定范文
2013/10/02 职场文书
书法培训心得体会
2014/01/05 职场文书
学习全国两会精神心得体会范文
2014/03/17 职场文书
网站创业计划书
2014/04/30 职场文书
法律专业求职信
2014/05/24 职场文书
旅游节目策划方案
2014/05/26 职场文书
校园运动会广播稿
2014/10/06 职场文书
先进个人事迹材料
2014/12/29 职场文书
志愿者工作心得体会
2016/01/15 职场文书
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
2021/04/24 Python