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 飞信好友免费短信API接口开源版
Jul 22 PHP
利用Memcached在php下实现session机制 替换PHP的原生session支持
Aug 21 PHP
PHP strncasecmp字符串比较的小技巧
Jan 04 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
Sep 28 PHP
PHP删除数组中空值的方法介绍
Apr 14 PHP
基于PHP的简单采集数据入库程序
Jul 30 PHP
CI框架实现cookie登陆的方法详解
May 18 PHP
php自动载入类用法实例分析
Jun 24 PHP
PHP上传图片、删除图片简单实例
Nov 12 PHP
PHP开发之用微信远程遥控服务器
Jan 25 PHP
PHP实现分布式memcache设置web集群session同步的方法
Apr 10 PHP
PHP学习笔记之session
May 06 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&amp;mysql 日期操作小记
2012/02/27 PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
2014/03/25 PHP
php中文语义分析实现方法示例
2019/09/28 PHP
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
input按钮的事件处理大全
2010/12/10 Javascript
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
jquery选择器-根据多个属性选择示例代码
2013/10/21 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
jquery实现简单的自动播放幻灯片效果
2015/06/13 Javascript
jquery+php随机生成红包金额数量代码分享
2015/08/27 Javascript
通过隐藏iframe实现无刷新上传文件操作
2016/03/16 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
angular.js分页代码的实例
2016/07/27 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
2017/01/17 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
d3绘制基本的柱形图的实现代码
2018/12/12 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
Python运算符重载用法实例
2015/05/28 Python
python操作ssh实现服务器日志下载的方法
2015/06/03 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
2017/07/11 Python
Python+request+unittest实现接口测试框架集成实例
2018/03/16 Python
python-docx修改已存在的Word文档的表格的字体格式方法
2018/05/08 Python
python 读取摄像头数据并保存的实例
2018/08/03 Python
Python图像处理之gif动态图的解析与合成操作详解
2018/12/30 Python
5分钟让你掌握css3阴影、倒影、渐变小技巧(小编推荐)
2016/08/15 HTML / CSS
瑞士国际航空官网:SWISS
2016/07/21 全球购物
美国求婚钻戒网站:Super Jeweler
2016/08/27 全球购物
windeln官方海外旗舰店:德淘超人气母婴超市
2017/12/15 全球购物
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
经销商会议欢迎词
2014/01/11 职场文书
《闻一多先生的说和做》教学反思
2014/04/28 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
2015年财务试用期工作总结
2014/12/24 职场文书
关于颐和园的导游词
2015/01/30 职场文书
Golang日志包的使用
2022/04/20 Golang