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 相关文章推荐
一个简单的MySQL数据浏览器
Oct 09 PHP
php 无法载入mysql扩展
Mar 12 PHP
PHP zlib扩展实现页面GZIP压缩输出
Jun 17 PHP
php购物网站支付paypal使用方法
Nov 28 PHP
PHP缓存机制Output Control详解
Jul 14 PHP
PHP之密码加密的几种方式
Jul 29 PHP
zen_cart实现支付前生成订单的方法
May 06 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
基于php流程控制语句和循环控制语句(讲解)
Oct 23 PHP
PHP设计模式之适配器模式原理与用法分析
Apr 25 PHP
PHP lcfirst()函数定义与用法
Mar 08 PHP
TP3.2.3框架文件上传操作实例详解
Jan 23 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中逗号与点号的区别
2013/08/05 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
捕获关闭窗口的脚本
2009/01/10 Javascript
什么是JavaScript
2009/08/13 Javascript
Jquery 获得服务器控件值的方法小结
2010/05/11 Javascript
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
js Form.elements[i]的使用实例
2011/11/13 Javascript
jquery对象和DOM对象的区别介绍
2013/08/09 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
jquery取消选择select下拉框示例代码
2014/02/22 Javascript
详解javascript实现瀑布流列式布局
2016/01/29 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
AngularJS中的作用域实例分析
2018/05/16 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
vue实现固定位置显示功能
2019/05/30 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
[03:42]2014DOTA2国际邀请赛 第三日比赛排位扑朔迷离
2014/07/12 DOTA
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
在Python的web框架中配置app的教程
2015/04/30 Python
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
Python面向对象之类和实例用法分析
2019/06/08 Python
python实现车牌识别的示例代码
2019/08/05 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
python模块hashlib(加密服务)知识点讲解
2019/11/25 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
解决Jupyter NoteBook输出的图表太小看不清问题
2020/04/16 Python
Python pip使用超时问题解决方案
2020/08/03 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
韩国11街:11STREET
2018/03/27 全球购物
Hunter Boots美国官方网站:赫特威灵顿雨靴
2018/06/16 全球购物
园林毕业生自我鉴定范文
2013/12/29 职场文书
文明餐桌行动实施方案
2014/02/19 职场文书
钱塘江大潮导游词
2015/02/03 职场文书
幸福来敲门观后感
2015/06/04 职场文书
行政处罚决定书
2015/06/24 职场文书
Django + Taro 前后端分离项目实现企业微信登录功能
2022/04/07 Python