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.ini中文版
Oct 09 PHP
PHP 时间日期操作实战
Aug 26 PHP
完美解决PHP中的Cannot modify header information 问题
Aug 12 PHP
CI框架自动加载session出现报错的解决办法
Jun 17 PHP
php微信公众开发之获取周边酒店信息的方法
Dec 22 PHP
PHP生成条形码大揭秘
Sep 24 PHP
PHP处理二进制数据的实现方法
Jun 13 PHP
php导出csv文件,可导出前导0实例代码
Nov 16 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
Oct 06 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
php实现socket推送技术的示例
Dec 20 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
Oct 30 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中转义mysql语句的实现代码
2011/06/24 PHP
PHP数组函数知识汇总
2016/05/12 PHP
PHP加密技术的简单实现
2016/09/04 PHP
PHP 传输会话curl函数的实例详解
2017/09/12 PHP
PHP基于phpqrcode类生成二维码的方法详解
2018/03/14 PHP
jquery 弹出层注册页面等(asp.net后台)
2010/06/17 Javascript
解析javascript系统错误:-1072896658的解决办法
2013/07/08 Javascript
javascript模拟实现C# String.format函数功能代码
2013/11/25 Javascript
点击显示指定元素隐藏其他同辈元素的方法
2014/02/19 Javascript
IE6 hack for js 集锦
2014/09/23 Javascript
jQuery统计指定子元素数量的方法
2015/03/17 Javascript
jQuery手指滑动轮播效果
2016/12/22 Javascript
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
EasyUI Tree树组件无限循环的解决方法
2017/09/27 Javascript
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
2019/01/15 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
linux下python抓屏实现方法
2015/05/22 Python
详解Python的Django框架中的模版继承
2015/07/16 Python
Python Queue模块详细介绍及实例
2016/12/27 Python
Python中read()、readline()和readlines()三者间的区别和用法
2017/07/30 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
2018/12/21 Python
python文件选择对话框的操作方法
2019/06/27 Python
flask框架中的cookie和session使用
2021/01/31 Python
IE矩阵Matrix滤镜旋转与缩放及如何结合transform
2012/11/29 HTML / CSS
canvas 橡皮筋式线条绘图应用方法
2019/02/13 HTML / CSS
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
城市轨道专业个人求职信范文
2013/09/23 职场文书
中学教师实习自我鉴定
2013/09/28 职场文书
党员年终民主评议的自我评价
2013/11/05 职场文书
村干部承诺书
2014/03/28 职场文书
贫困生助学金感谢信
2015/01/21 职场文书
讲座新闻稿
2015/07/18 职场文书
判断Python中的Nonetype类型
2021/05/25 Python
Oracle11g R2 安装教程完整版
2021/06/04 Oracle