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 - Html Transfer Code
Oct 09 PHP
十天学会php之第二天
Oct 09 PHP
人大复印资料处理程序_补充篇
Oct 09 PHP
PHP date函数参数详解
Nov 27 PHP
php的mssql数据库连接类实例
Nov 28 PHP
浅析iis7.5安装配置php环境
May 10 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
Oct 13 PHP
php经典算法集锦
Nov 14 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
PHP大文件分割分片上传实现代码
Dec 09 PHP
通过代码实例解析PHP session工作原理
Dec 11 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 远程关机实现代码
2009/11/10 PHP
PHP文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
PHP删除HTMl标签的三种解决方法
2013/06/30 PHP
ThinkPHP文件缓存类代码分享
2015/04/22 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
2017/03/14 PHP
THINKPHP3.2使用soap连接webservice的解决方法
2017/12/13 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
2018/09/26 PHP
javascript instanceof,typeof的区别
2010/03/24 Javascript
jQuery中live方法的重复绑定说明
2011/10/21 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
初识NodeJS服务端开发入门(Express+MySQL)
2017/04/07 NodeJs
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
详解webpack进阶之loader篇
2017/08/23 Javascript
认识jQuery的Promise的具体使用方法
2017/10/10 jQuery
Vue路由钩子之afterEach beforeEach的区别详解
2018/07/15 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
2018/08/25 Javascript
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
Vue仿微信app页面跳转动画效果
2019/08/21 Javascript
es6函数之rest参数用法实例分析
2020/04/18 Javascript
详解python websocket获取实时数据的几种常见链接方式
2019/07/01 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
2020/02/18 Python
python opencv进行图像拼接
2020/03/27 Python
Python实现Excel自动分组合并单元格
2021/02/22 Python
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
初中三年学生的学习自我评价
2013/11/13 职场文书
技术总监的工作职责
2013/11/13 职场文书
妇女儿童发展规划实施方案
2014/03/16 职场文书
大学学习计划书范文
2014/05/02 职场文书
群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
致接力运动员加油稿
2015/07/21 职场文书
小学校园广播稿
2015/08/18 职场文书
详解php中流行的rpc框架
2021/05/29 PHP
table不让td文字溢出操作方法
2022/12/24 HTML / CSS