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数据类型的总结分析
Jun 13 PHP
解析crontab php自动运行的方法
Jun 24 PHP
CI框架中zip类应用示例
Jun 17 PHP
php可生成缩略图的文件上传类实例
Dec 17 PHP
php中的观察者模式简单实例
Jan 20 PHP
PHP实现简单数字分页效果
Jul 26 PHP
Smarty环境配置与使用入门教程
May 11 PHP
PHP将页面中点击数量高的链接进行高亮显示的方法
May 30 PHP
Yii2验证器(Validator)用法分析
Jul 23 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
Oct 26 PHP
PHP类的自动加载与命名空间用法实例分析
Jun 05 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 array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
摘自织梦CMS的HTTP文件下载类
2015/08/08 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
2016/04/04 PHP
PDO::getAvailableDrivers讲解
2019/01/28 PHP
Javascript Cookie读写删除操作的函数
2010/03/02 Javascript
js DOM 元素ID就是全局变量
2012/09/20 Javascript
node.js中的console.error方法使用说明
2014/12/10 Javascript
javascript实现左右控制无缝滚动
2014/12/31 Javascript
Javascript中this关键字的一些小知识
2015/03/15 Javascript
js右下角弹出提示框示例代码
2016/01/12 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
2016/05/12 Javascript
BootStrap下jQuery自动完成的样式调整
2016/05/30 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
JavaScript闭包和回调详解
2017/08/09 Javascript
10个在JavaScript开发中常遇到的BUG
2017/12/18 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
用webAPI实现图片放大镜效果
2020/11/23 Javascript
Python实现抓取网页并且解析的实例
2014/09/20 Python
Python中输出ASCII大文字、艺术字、字符字小技巧
2015/04/28 Python
Python编程判断一个正整数是否为素数的方法
2017/04/14 Python
Python3中函数参数传递方式实例详解
2019/05/05 Python
使用 Python 写一个简易的抽奖程序
2019/12/08 Python
python多进程重复加载的解决方式
2019/12/13 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
2020/03/13 Python
Python使用xpath实现图片爬取
2020/09/16 Python
CSS3实现同时执行倾斜和旋转的动画效果
2016/10/27 HTML / CSS
EVE LOM英国官网:全世界最好的洁面膏
2017/10/30 全球购物
企业面试题试卷附带答案
2015/12/20 面试题
英语专业大学生求职简历的自我评价
2013/10/18 职场文书
小学数学课后反思
2014/04/23 职场文书
2014年新生军训方案
2014/05/01 职场文书
承诺书模板
2014/08/30 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
股东授权委托书范文
2014/09/13 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书