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 相关文章推荐
php cookie 登录验证示例代码
Mar 16 PHP
PHP生成随机用户名和密码的实现代码
Feb 27 PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
Jun 01 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
Apr 01 PHP
PHP的Yii框架的基本使用示例
Aug 21 PHP
PHP 中使用ajax时一些常见错误总结整理
Feb 27 PHP
完美解决Thinkphp3.2中插入相同数据的问题
Aug 01 PHP
php 可变函数使用小结
Jun 12 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
Apr 23 PHP
php和asp语法上的区别总结
May 12 PHP
PHP经典设计模式之依赖注入定义与用法详解
May 21 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
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
PHP实现二维数组根据key进行排序的方法
2016/12/30 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
JQuery 选项卡效果(JS与HTML的分离)
2010/04/01 Javascript
Jquery多选下拉列表插件jquery multiselect功能介绍及使用
2013/05/24 Javascript
jquery常用特效方法使用示例
2014/04/25 Javascript
JavaScript中获取样式的原生方法小结
2014/10/08 Javascript
js获取客户端操作系统类型的方法【测试可用】
2016/05/27 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
nodejs之get/post请求的几种方式小结
2017/07/26 NodeJs
基于JSONP原理解析(推荐)
2017/12/04 Javascript
浅谈Node 调试工具入门教程
2018/03/20 Javascript
解决vue数组中对象属性变化页面不渲染问题
2018/08/09 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
NProgress显示顶部进度条效果及使用详解
2019/09/21 Javascript
通过实例解析javascript Date对象属性及方法
2020/11/04 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
python进行两个表格对比的方法
2018/06/27 Python
用python建立两个Y轴的XY曲线图方法
2019/07/08 Python
python小程序实现刷票功能详解
2019/07/17 Python
Django rest framework jwt的使用方法详解
2019/08/08 Python
对python中UDP,socket的使用详解
2019/08/22 Python
在python3中使用shuffle函数要注意的地方
2020/02/28 Python
Python使用文件操作实现一个XX信息管理系统的示例
2020/07/02 Python
html5 视频播放解决方案
2016/11/06 HTML / CSS
StubHub意大利:购买和出售全球演唱会和体育赛事门票
2017/11/21 全球购物
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
瑞典香水、须后水和美容产品购物网站:Parfym-Klick.se
2019/12/29 全球购物
英国礼品和生活方式品牌:Treat Republic
2020/11/21 全球购物
上班打牌检讨书
2014/02/07 职场文书
大学生在校学习的自我评价
2014/02/18 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书
《敬重卑微》读后感3篇
2019/11/26 职场文书
Python echarts实现数据可视化实例详解
2022/03/03 Python
Vue Element plus使用方法梳理
2022/12/24 Vue.js