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实现ODBC数据分页显示一例
Oct 09 PHP
PHP $_SERVER详解
Jan 16 PHP
PHP执行linux系统命令的常用函数使用说明
Apr 27 PHP
PHP执行zip与rar解压缩方法实现代码
Dec 05 PHP
php去除字符串换行符示例分享
Feb 13 PHP
php实现的DateDiff和DateAdd时间函数代码分享
Aug 16 PHP
在openSUSE42.1下编译安装PHP7 的方法
Dec 24 PHP
PHP面向对象程序设计组合模式与装饰模式详解
Dec 02 PHP
PHP中cookie知识点学习
May 06 PHP
PHP实现的mysql读写分离操作示例
May 22 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
Oct 24 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 读取shell管道传输过来的内容
2010/03/01 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
2013/08/10 PHP
PHP中substr()与explode()函数用法分析
2014/11/24 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
2016/12/24 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
用js统计用户下载网页所需时间的脚本
2008/10/15 Javascript
JavaScript 语法集锦 脚本之家基础推荐
2009/11/15 Javascript
深入理解JavaScript高级之词法作用域和作用域链
2013/12/10 Javascript
js实现精美的银灰色竖排折叠菜单
2015/05/16 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
三种Node.js写文件的方式
2016/03/08 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
jquery实现input框获取焦点的简单实例
2017/01/26 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
vue interceptor 使用教程实例详解
2018/09/13 Javascript
移动端吸顶fixbar的解决方案详解
2019/07/17 Javascript
javascript自定义日期比较函数用法示例
2019/07/22 Javascript
关于layui导航栏不展示下拉列表的解决方法
2019/09/25 Javascript
[01:28:43]2014 DOTA2华西杯精英邀请赛5 24 DK VS CIS
2014/05/25 DOTA
在Python的web框架中配置app的教程
2015/04/30 Python
总结python爬虫抓站的实用技巧
2016/08/09 Python
如何使用Flask-Migrate拓展数据库表结构
2019/07/24 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
美国室内盆栽植物购买网站:Plants.com
2020/04/24 全球购物
大学毕业生通用自荐信范文
2013/10/31 职场文书
信息技术专业个人自我评价
2013/12/11 职场文书
2014年五一活动策划方案
2014/03/15 职场文书
高中运动会广播稿
2014/09/16 职场文书
见义勇为事迹材料
2014/12/24 职场文书
升职自荐信范文
2015/03/27 职场文书
三八红旗手主要事迹材料
2015/11/04 职场文书
python3 删除所有自定义变量的操作
2021/04/08 Python
奥特曼十大神器:奥特手镯在榜,第一是贝利亚的神器
2022/03/18 日漫