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来实现网络服务
Sep 15 PHP
解析php 版获取重定向后的地址(代码)
Jun 26 PHP
php计算指定目录下文件占用空间的方法
Mar 13 PHP
微信支付开发维权通知实例
Jul 12 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
PHP实现合并两个排序链表的方法
Jan 19 PHP
PHP中的self关键字详解
Jun 23 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 PHP
php回调函数处理数组操作示例
Apr 13 PHP
PHP rsa加密解密算法原理解析
Dec 09 PHP
PHP笛卡尔积实现原理及代码实例
Dec 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
小文件php+SQLite存储方案
2010/09/04 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
php判断当前操作系统类型
2015/10/28 PHP
详解js异步文件加载器
2016/01/24 PHP
PHP入门教程之图像处理技巧分析
2016/09/11 PHP
Javascript操纵Cookie实现购物车程序
2007/02/15 Javascript
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
JS更改select内option属性的方法
2015/10/14 Javascript
JS中frameset框架弹出层实例代码
2016/04/01 Javascript
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
推荐10款扩展Web表单的JS插件
2017/12/25 Javascript
react以create-react-app为基础创建项目
2018/03/14 Javascript
webpack 从指定入口文件中提取公共文件的方法
2018/11/13 Javascript
TypeScript开发Node.js程序的方法
2019/04/30 Javascript
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
2017/04/11 Python
对Python中range()函数和list的比较
2018/04/19 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
Python get获取页面cookie代码实例
2018/09/12 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
2018/12/24 Python
python中时间转换datetime和pd.to_datetime详析
2019/08/11 Python
python实现银行实战系统
2020/02/26 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
Python多线程threading创建及使用方法解析
2020/06/17 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
2020/12/14 Python
国税会议欢迎词
2014/01/16 职场文书
国际商务专业职业生涯规划书范文
2014/01/17 职场文书
电子商务系毕业生自荐信
2014/05/29 职场文书
信息与工商管理职业规划范文:为梦想而搏击
2014/09/11 职场文书
关于远足的感想
2015/08/10 职场文书
Html5大屏数据可视化开发的实现
2021/06/11 HTML / CSS