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和XSL stylesheets转换XML文档
Oct 09 PHP
用PHP和ACCESS写聊天室(二)
Oct 09 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
Jul 19 PHP
PHP输出数组中重名的元素的几种处理方法
Sep 05 PHP
PHP 通过Socket收发十六进制数据的实现代码
Aug 16 PHP
php中的mongodb select常用操作代码示例
Sep 06 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
Nov 04 PHP
php使用pdo连接并查询sql数据库的方法
Dec 24 PHP
php+ajax实现的点击浏览量加1
Apr 16 PHP
PHP防止刷新重复提交页面的示例代码
Nov 11 PHP
Laravel Eloquent ORM 多条件查询的例子
Oct 10 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
Yii实现简单分页的方法
2016/04/29 PHP
safari下载文件自动加了html后缀问题
2018/11/09 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
2019/07/08 PHP
js onpropertychange输入框 事件获取属性
2009/03/26 Javascript
Javascript Tab 导航插件 (23个)
2009/06/11 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
require.js配合插件text.js实现最简单的单页应用程序
2016/07/12 Javascript
详解Angular中$cacheFactory缓存的使用
2016/08/19 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
vue、react等单页面项目应该这样子部署到服务器
2018/01/03 Javascript
原生JS实现轮播图效果
2018/10/12 Javascript
Node.js JSON模块用法实例分析
2019/01/04 Javascript
小程序组件之自定义顶部导航实例
2019/06/12 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
vue实现点击出现操作弹出框的示例
2020/11/05 Javascript
python利用datetime模块计算时间差
2015/08/04 Python
Mac中升级Python2.7到Python3.5步骤详解
2017/04/27 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
Dlib+OpenCV深度学习人脸识别的方法示例
2019/05/14 Python
Django ValuesQuerySet转json方式
2020/03/16 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
python随机模块random的22种函数(小结)
2020/05/15 Python
Python tkinter制作单机五子棋游戏
2020/09/14 Python
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
英国领先的男装设计师服装购物网站:Mainline Menswear
2018/02/04 全球购物
培训讲师邀请函
2014/01/10 职场文书
护士自我介绍信
2014/01/13 职场文书
模具专业毕业生自荐书范文
2014/02/19 职场文书
设备动力科岗位职责范本
2014/02/23 职场文书
开业庆典主持词
2014/03/21 职场文书
运动会口号大全
2014/06/07 职场文书
关于工作经历的证明书
2014/10/11 职场文书
mysql中varchar类型的日期进行比较、排序等操作的实现
2021/11/17 MySQL