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 相关文章推荐
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
May 03 PHP
php中批量替换文件名的实现代码
Jul 20 PHP
PHP中如何实现常用邮箱的基本判断
Jan 07 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
May 04 PHP
PHP向浏览器输出内容的4个函数总结
Nov 17 PHP
PHP中的命名空间相关概念浅析
Jan 22 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
Feb 03 PHP
php上传文件并显示上传进度的方法
Mar 24 PHP
PHP浮点数精度问题汇总
May 13 PHP
PHP附件下载中文名称乱码的解决方法
Dec 17 PHP
php封装的page分页类完整实例代码
Feb 01 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
Apr 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
2020年4月放送!《Princess Connect Re:Dive》制作组 & 角色声优公开!
2020/03/06 日漫
php中的数组操作函数整理
2008/08/18 PHP
php设计模式 Bridge (桥接模式)
2011/06/26 PHP
PHP实现支持SSL连接的SMTP邮件发送类
2015/03/05 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
2017/05/04 PHP
Laravel 5.5 异常处理 &amp; 错误日志的解决
2019/10/17 PHP
js实现弹窗插件功能实例代码分享
2013/12/12 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
2015/09/01 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
2016/02/06 Javascript
js实现贪吃蛇小游戏
2019/10/29 Javascript
详解Python中列表和元祖的使用方法
2015/04/25 Python
使用Python的web.py框架实现类似Django的ORM查询的教程
2015/05/02 Python
python3.5仿微软计算器程序
2020/03/30 Python
使用Python3制作TCP端口扫描器
2017/04/17 Python
Python中异常重试的解决方案详解
2017/05/05 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
2018/10/29 Python
Python之使用adb shell命令启动应用的方法详解
2019/01/07 Python
python2.7实现复制大量文件及文件夹资料
2019/08/31 Python
Python序列化与反序列化pickle用法实例
2019/11/11 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
python从ftp获取文件并下载到本地
2020/12/05 Python
Python用access判断文件是否被占用的实例方法
2020/12/17 Python
解决pytorch 模型复制的一些问题
2021/03/03 Python
检测浏览器对HTML5和CSS3支持度的方法
2015/06/25 HTML / CSS
荷兰DOD药房中文官网:DeOnlineDrogist
2020/12/27 全球购物
新闻编辑自荐信
2013/11/03 职场文书
面料业务员岗位职责
2013/12/26 职场文书
网上快餐厅创业计划书
2014/02/01 职场文书
天鹅湖观后感
2015/06/09 职场文书
小学生暑假安全保证书
2015/07/13 职场文书
掌握这项技巧,一年阅读300本书不是梦
2019/09/12 职场文书
详解Python为什么不用设计模式
2021/06/24 Python
一文搞懂Python Sklearn库使用
2021/08/23 Python
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript