CI框架实现cookie登陆的方法详解


Posted in PHP onMay 18, 2016

本文实例讲述了CI框架实现cookie登陆的方法。分享给大家供大家参考,具体如下:

第一步:login.php

//登陆方法
 public function login(){
  //如果用户名和密码为空,则返回登陆页面
  if(empty($_POST['username']) || empty($_POST['password'])){
   $data['verifycode'] = rand(1000,9999);//生成一个四位数字的验证码
   //将验证码放入session中,注意:参数是数组的格式
   $this->session->set_userdata($data);
   //注意:CI框架默认模板引擎解析的模板文件中变量不需要$符号
   //$this->parser->parse("admin/login",$data);
   //smarty模板变量赋值
   $this->tp->assign("verifycode",$data['verifycode']);
   //ci框架在模板文件中使用原生态的PHP语法输出数据
   //$this->load->view('login',$data);//登陆页面,注意:参数2需要以数组的形式出现
   //显示smarty模板引擎设定的模板文件
   $this->tp->display("admin/login.php");
  }else{
   $username = isset($_POST['username'])&&!empty($_POST['username'])?trim($_POST['username']):'';//用户名
   $password = isset($_POST['password'])&&!empty($_POST['password'])?trim($_POST['password']):'';//密码
   $verifycode = isset($_POST['verifycode'])&&!empty($_POST['verifycode'])?trim($_POST['verifycode']):'';//验证码
   //做验证码的校验
   if($verifycode == $this->session->userdata('verifycode')){
    //根据用户名及密码获取用户信息,注意:参数2是加密的密码
    $user_info=$this->user_model->check_user_login($username,md5($password));
    if($user_info['user_id'] > 0){
     //将用户id、username、password放入cookie中
     //第一种设置cookie的方式:采用php原生态的方法设置的cookie的值
     //setcookie("user_id",$user_info['user_id'],86500);
     //setcookie("username",$user_info['username'],86500);
     //setcookie("password",$user_info['password'],86500);
     //echo $_COOKIE['username'];
     //第二种设置cookie的方式:通过CI框架的input类库
     $this->input->set_cookie("username",$user_info['username'],3600);
     $this->input->set_cookie("password",$user_info['password'],3600);
     $this->input->set_cookie("user_id",$user_info['user_id'],3600);
     //echo $this->input->cookie("password");//适用于控制器
     //echo $this->input->cookie("username");//适用于控制器
     //echo $_COOKIE['username'];//在模型类中可以通过这种方式获取cookie值
     //echo $_COOKIE['password'];//在模型类中可以通过这种方式获取cookie值
     //第三种设置cookie的方式:通过CI框架的cookie_helper.php函数库文件
     //这种方式不是很灵验,建议大家采取第二种方式即可
     //set_cookie("username",$user_info['username'],3600);
     //echo get_cookie("username");
     //session登陆时使用:将用户名和用户id存入session中
     //$data['username']=$user_info['username'];
     //$data['user_id']=$user_info['user_id'];
     //$this->session->set_userdata($data);
     //跳转到指定页面
     //注意:site_url()与base_url()的区别,前者带index.php,后者不带index.php
     header("location:".site_url("index/index"));
    }
   }else{
    //跳转到登陆页面
    header("location:".site_url("common/login"));
   }
  }
 }
}

第二步:User_model.php

//cookie登陆:检测用户是否登陆,如果cookie值失效,则返回false,如果cookie值未失效,则根据cookie中的用户名和密码从数据库中获取用户信息,如果能获取到用户信息,则返回查询到的用户信息,如果没有查询到用户信息,则返回0
 public function is_login(){
  //获取cookie中的值
  if(empty($_COOKIE['username']) || empty($_COOKIE['password'])){
   $user_info = false;
  }else{
   $user_info=$this->check_user_login($_COOKIE['username'],$_COOKIE['password']);
  }
  return $user_info;
 }
 //根据用户名及加密密码从数据库中获取用户信息,如果能获取到,则返回获取到的用户信息,否则返回false,注意:密码为加密密码
 public function check_user_login($username,$password){
  //这里大家要注意:$password为md5加密后的密码
  //$this->db->query("select * from ");
  //快捷查询类的使用:能为我们提供快速获取数据的方法
  //此数组为查询条件
  //注意:关联数组
  $arr=array(
   'username'=>$username,//用户名
   'password'=>$password,//加密密码
   'status'=>1   //账户为开启状态
  );
  //在database.php文件中已经设置了数据表的前缀,所以此时数据表无需带前缀
  $query = $this->db->get_where("users",$arr);
  //返回二维数组
  //$data=$query->result_array();
  //返回一维数组
  $user_info=$query->row_array();
  if(!empty($user_info)){
   return $user_info;
  }else{
   return false;
  }
}

第三步:其它控制器:

public function __construct(){
  //调用父类的构造函数
  parent::__construct();
  $this->load->library('tp'); //smarty模板解析类
  $this->load->helper('url'); //url函数库文件
  $this->load->model("user_model");//User_model模型类实例化对象
  $this->cur_user=$this->user_model->is_login();
  if($this->cur_user === false){
   header("location:".site_url("common/login"));
  }else{
   //如果已经登陆,则重新设置cookie的有效期
   $this->input->set_cookie("username",$this->cur_user['username'],3600);
   $this->input->set_cookie("password",$this->cur_user['password'],3600);
   $this->input->set_cookie("user_id",$this->cur_user['user_id'],3600);
  }
  $this->load->library('pagination');//分页类库
  $this->load->model("role_model");//member_model模型类
  $this->load->model("operation_model");//引用operation_model模型
  $this->load->model("object_model");//引用object_model模型
  $this->load->model("permission_model");//引用permission_model模型
}

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

PHP 相关文章推荐
杏林同学录(一)
Oct 09 PHP
PHP之COOKIE支持详解
Sep 20 PHP
php和javascript之间变量的传递实现代码
Dec 19 PHP
codeigniter自带数据库类使用方法说明
Mar 25 PHP
php中ob_flush函数和flush函数用法分析
Mar 18 PHP
PHP互换两个变量值的方法(不用第三变量)
Nov 14 PHP
Yii2实现ActiveForm ajax提交
May 26 PHP
php curl上传、下载、https登陆实现代码
Jul 23 PHP
PHP设计模式之模板方法模式定义与用法详解
Apr 02 PHP
Thinkphp 3.2框架使用Redis的方法详解
Oct 24 PHP
PHP实现微信公众号验证Token的示例代码
Dec 16 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Mar 09 PHP
浅析php静态方法与非静态方法的用法区别
May 17 #PHP
php关闭warning问题的解决方法
May 17 #PHP
XHProf报告字段含义的解析
May 17 #PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
May 17 #PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
May 17 #PHP
简单理解PHP的面向对象编程方式
May 17 #PHP
WordPress中的shortcode短代码功能使用详解
May 17 #PHP
You might like
dedecms模版制作使用方法
2007/04/03 PHP
PHP读取文件并可支持远程文件的代码分享
2012/10/03 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
android上传图片到PHP的过程详解
2015/08/03 PHP
php UNIX时间戳用法详解
2017/02/16 PHP
CI框架实现创建自定义类库的方法
2018/12/25 PHP
2014最热门的JavaScript代码高亮插件推荐
2014/11/25 Javascript
script标签属性用type还是language
2015/01/21 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
JavaScript构造函数详解
2015/12/27 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
2017/03/07 Javascript
Angular 表单控件示例代码
2017/06/26 Javascript
详解vue-cli + webpack 多页面实例配置优化方法
2017/07/13 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
浅谈React 服务器端渲染的使用
2018/05/08 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
JS数组方法slice()用法实例分析
2020/01/18 Javascript
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
[05:40]DOTA2荣耀之路6:Wings最后进攻
2018/05/30 DOTA
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
python高级特性和高阶函数及使用详解
2018/10/17 Python
在python 中实现运行多条shell命令
2019/01/07 Python
python3.6+django2.0+mysql搭建网站过程详解
2019/07/24 Python
pycharm 2018 激活码及破解补丁激活方式
2020/09/21 Python
Clarks鞋澳大利亚官方网站:Clarks Australia
2019/12/25 全球购物
2019年分享net面试的经历和题目
2016/08/07 面试题
优秀学生干部个人的自我评价
2013/10/04 职场文书
建房协议书
2014/04/11 职场文书
人事任命书格式
2014/06/05 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
2014镇党委书记党建工作汇报材料
2014/11/02 职场文书
小学运动会加油词
2015/07/18 职场文书
广播稿:校园广播稿范文
2019/04/17 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python
低门槛开发iOS、Android、小程序应用的前端框架详解
2021/10/16 Javascript
python数字图像处理:图像简单滤波
2022/06/28 Python