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 相关文章推荐
第三节--定义一个类
Nov 16 PHP
PHP开发规范手册之PHP代码规范详解
Jan 13 PHP
简单实用的.net DataTable导出Execl
Oct 28 PHP
PHP函数addslashes和mysql_real_escape_string的区别
Apr 22 PHP
PHP中使用匿名函数操作数据库的例子
Nov 17 PHP
PHP中使用正则表达式提取中文实现笔记
Jan 20 PHP
php实现的用户查询类实例
Jun 18 PHP
Paypal实现循环扣款(订阅)功能
Mar 23 PHP
PHP简单实现欧拉函数Euler功能示例
Nov 06 PHP
php多进程模拟并发事务产生的问题小结
Dec 07 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
Jun 12 PHP
php模式设计之观察者模式应用实例分析
Sep 25 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+mysql实现简单的增删改查功能
2015/07/13 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
2016/03/18 PHP
Mootools 1.2教程 定时器和哈希简介
2009/09/15 Javascript
javascript 读取XML数据,在页面中展现、编辑、保存的实现
2009/10/27 Javascript
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
js cookies实现简单统计访问次数
2009/11/24 Javascript
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
addEventListener 的用法示例介绍
2014/05/07 Javascript
JQuery弹出层示例可自定义
2014/05/19 Javascript
Javascript中call与apply的学习笔记
2014/09/22 Javascript
js实现分享到随页面滚动而滑动效果的方法
2015/04/10 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
jQuery获取多种input值的简单实现方法
2016/06/20 Javascript
JavaScript实现图片懒加载(Lazyload)
2016/11/28 Javascript
探索webpack模块及webpack3新特性
2017/09/18 Javascript
vuejs使用递归组件实现树形目录的方法
2017/09/30 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
2017/12/22 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
Python中的map、reduce和filter浅析
2014/04/26 Python
用Python操作字符串之rindex()方法的使用
2015/05/19 Python
python实现多层感知器
2019/01/18 Python
pycharm的python_stubs问题
2020/04/08 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
Sql面试题
2013/03/20 面试题
探矿工程师自荐信
2014/01/24 职场文书
工程质量月活动方案
2014/02/19 职场文书
户外宣传策划方案
2014/05/25 职场文书
师范类求职信
2014/06/21 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
毕业典礼主持词
2015/06/29 职场文书
奖学金申请个人主要事迹材料
2015/11/04 职场文书
转变工作作风心得体会
2016/01/23 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书
Vue 打包后相对路径的引用问题
2022/06/05 Vue.js