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 相关文章推荐
FCKeditor的安装(PHP)
Jan 13 PHP
apache+php+mysql安装配置方法小结
Aug 01 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
Jan 13 PHP
php实现递归的三种基本方式
Jul 04 PHP
php批量删除超链接的实现方法
Oct 19 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
Dec 17 PHP
php实现文章置顶功能的方法
Oct 20 PHP
php自定义扩展名获取函数示例
Dec 12 PHP
PHP简单实现循环链表功能示例
Nov 10 PHP
PHP 使用二进制保存用户状态的实例
Jan 29 PHP
php curl优化下载微信头像的方法总结
Sep 07 PHP
PHP PDO数据库操作预处理与注意事项
Mar 16 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
高分R级DC动画剧《哈莉·奎茵》第二季正式预告首发
2020/04/09 欧美动漫
php抓取页面与代码解析 推荐
2010/07/23 PHP
为PHP初学者的8点有效建议
2010/11/20 PHP
php生成图片验证码的实例讲解
2015/08/03 PHP
详解Yii2.0使用AR联表查询实例
2017/06/16 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
2017/10/06 PHP
建立良好体验度的Web注册系统ajax
2007/07/09 Javascript
初学JavaScript第二章
2008/09/30 Javascript
异步动态加载js与css文件的js代码
2013/09/15 Javascript
jquery弹出遮掩层效果【附实例代码】
2016/04/28 Javascript
VueJs与ReactJS和AngularJS的异同点
2016/12/12 Javascript
JavaScript实现倒计时跳转页面功能【实用】
2016/12/13 Javascript
JS中parseInt()和map()用法分析
2016/12/16 Javascript
JavaScript 详解预编译原理
2017/01/22 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
vue-cli扩展多模块打包的示例代码
2018/04/09 Javascript
vue使用自定义icon图标的方法
2018/05/14 Javascript
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
2020/10/22 Javascript
python动态性强类型用法实例
2015/05/09 Python
详解Python if-elif-else知识点
2018/06/11 Python
python爬虫获取百度首页内容教学
2018/12/23 Python
Python使用贪婪算法解决问题
2019/10/22 Python
豆腐の盛田屋官网:日本自然派的豆乳面膜、肥皂、化妆水、乳液等
2016/10/08 全球购物
Hawes & Curtis澳大利亚官网:英国经典服饰品牌
2018/10/29 全球购物
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
小学母亲节活动方案
2014/03/14 职场文书
会计的岗位职责
2014/03/15 职场文书
联谊活动总结
2014/08/28 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
工商局调档介绍信
2015/10/22 职场文书
如何在CocosCreator里画个炫酷的雷达图
2021/04/16 Javascript
springboot拦截器无法注入redisTemplate的解决方法
2021/06/27 Java/Android
Python 数据可视化神器Pyecharts绘制图像练习
2022/02/28 Python