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新手上路(七)
Oct 09 PHP
利用php获取服务器时间的实现代码
Jun 07 PHP
php实现监听事件
Nov 06 PHP
PHP的反射类ReflectionClass、ReflectionMethod使用实例
Aug 05 PHP
Laravel中使用自己编写类库的3种方法
Feb 10 PHP
php中smarty模板条件判断用法实例
Jun 11 PHP
使用图灵api创建微信聊天机器人
Jul 23 PHP
php上传图片并压缩的实现方法
Dec 22 PHP
PHP二维数组去重实例分析
Nov 18 PHP
thinkPHP实现多字段模糊匹配查询的方法
Dec 01 PHP
php正则判断是否为合法身份证号的方法
Mar 16 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
Aug 05 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
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
php ctype函数中文翻译和示例
2014/03/21 PHP
PHP统一页面编码避免乱码问题
2015/04/09 PHP
php简单实现发送带附件的邮件
2015/06/10 PHP
php获取flash尺寸详细数据的方法
2016/11/12 PHP
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
javascript中怎么做对象的类型判断
2013/11/11 Javascript
基于jQuery实现下拉框
2014/11/24 Javascript
简介JavaScript中getUTCMonth()方法的使用
2015/06/10 Javascript
基于jQuery实现点击列表加载更多效果
2016/05/31 Javascript
BootStrap下拉框在firefox浏览器界面不友好的解决方案
2016/08/18 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
2016/09/02 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
js原生Ajax的封装和原理详解
2017/03/11 Javascript
微信小程序实现MUI数字输入框效果
2018/01/31 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
webpack4 CSS Tree Shaking的使用
2018/09/03 Javascript
vue2过滤器模糊查询方法
2018/09/16 Javascript
微信接入之获取用户头像的方法步骤
2019/09/23 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
2020/10/31 Javascript
vuex的使用步骤
2021/01/06 Vue.js
python实现TCP服务器端与客户端的方法详解
2015/04/30 Python
Python程序包的构建和发布过程示例详解
2019/06/09 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
python 利用turtle模块画出没有角的方格
2019/11/23 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
HTML5语义化元素你真的用对了吗
2019/08/22 HTML / CSS
加拿大购物频道:The Shopping Channel
2016/07/21 全球购物
团日活动总结范文
2014/04/25 职场文书
初三学习计划书范文
2014/04/30 职场文书
2014年安全生产大检查方案
2014/05/13 职场文书
大专生自我鉴定怎么写
2014/09/16 职场文书
铁人纪念馆观后感
2015/06/16 职场文书
2015年主婚人婚礼致辞
2015/07/28 职场文书
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL