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在XP下IIS和Apache2服务器上的安装
Sep 05 PHP
模板引擎Smarty深入浅出介绍
Dec 06 PHP
C# Assembly类访问程序集信息
Jun 13 PHP
php中关于普通表单多文件上传的处理方法
Mar 25 PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
Jul 18 PHP
PHP判断远程图片是否存在的几种方法
May 04 PHP
php实现的九九乘法口诀表简洁版
Jul 28 PHP
PHP查看SSL证书信息的方法
Sep 22 PHP
php 生成签名及验证签名详解
Oct 26 PHP
PHP将字符串首字母大小写转换的实例
Jan 21 PHP
PHP笛卡尔积实现算法示例
Jul 30 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
Oct 12 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
为查询结果建立向后/向前按钮
2006/10/09 PHP
php实现图片缩略图的方法
2016/03/29 PHP
ExtJS 2.0实用简明教程之应用ExtJS
2009/04/29 Javascript
JS记录用户登录次数实现代码
2014/01/15 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
jQuery实现响应浏览器缩放大小并改变背景颜色
2014/10/31 Javascript
一个仿微博登陆邮箱提示框js开发案例
2016/07/28 Javascript
Angular 4依赖注入学习教程之ClassProvider的使用(三)
2017/06/04 Javascript
vuex 的简单使用
2018/03/22 Javascript
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
详解express + mock让前后台并行开发
2018/06/06 Javascript
JS高级技巧(简洁版)
2018/07/29 Javascript
重学JS 系列:聊聊继承(推荐)
2019/04/11 Javascript
node中实现删除目录的几种方法
2019/06/24 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
微信小程序的引导页实现代码
2020/06/24 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
你不知道的 TypeScript 高级类型(小结)
2020/08/28 Javascript
python将unicode转为str的方法
2017/06/21 Python
python中正则表达式的使用方法
2018/02/25 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
Python shutil模块用法实例分析
2019/10/02 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
2021/01/08 Python
CSS3实现可翻转的hover效果
2018/05/23 HTML / CSS
英国知名的护肤彩妆与时尚配饰大型综合零售电商:Unineed
2016/11/21 全球购物
秘书英文求职信范文
2014/01/31 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
歌唱比赛主持词
2014/03/18 职场文书
三好生演讲稿
2014/09/12 职场文书
2015年新农村建设指导员工作总结
2015/07/24 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书
WCG2010 星际争霸决赛 Flash vs Goojila 1 星际经典比赛回顾
2022/04/01 星际争霸