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代码简化
Feb 08 PHP
一步一步学习PHP(7) php 字符串相关应用
Mar 05 PHP
PHP 第二节 数据类型之转换
Apr 28 PHP
解析dedeCMS验证码的实现代码
Jun 07 PHP
php随机生成数字字母组合的方法
Mar 18 PHP
PHP实现QQ空间自动回复说说的方法
Dec 02 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
Mar 14 PHP
100行PHP代码实现socks5代理服务器
Apr 28 PHP
PHP实现小偷程序实例
Oct 31 PHP
php记录搜索引擎爬行记录的实现代码
Mar 02 PHP
微信公众号开发之获取位置信息php代码
Jun 13 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
Dec 20 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+JS+rsa数据加密传输实现代码
2011/03/23 PHP
php实现文件下载实例分享
2014/06/02 PHP
php数组冒泡排序算法实例
2016/05/06 PHP
PHP设计模式之观察者模式定义与用法分析
2019/04/04 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
js Function类型
2011/12/04 Javascript
HTML上传控件取消选择
2013/03/06 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
JS实现控制表格行文本对齐的方法
2015/03/30 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
学习JavaScript设计模式(接口)
2015/11/26 Javascript
深入理解js promise chain
2016/05/05 Javascript
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
浅谈vue 锚点指令v-anchor的使用
2019/11/13 Javascript
Vue中keep-alive组件作用详解
2020/02/04 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
pycharm 使用心得(四)显示行号
2014/06/05 Python
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
Python绘图实现显示中文
2019/12/04 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
python TCP包注入方式
2020/05/05 Python
Python类型转换的魔术方法详解
2020/12/23 Python
浅析HTML5中的 History 模式
2017/06/22 HTML / CSS
如何在Canvas上的图形/图像绑定事件监听的实现
2020/09/16 HTML / CSS
HTML5单选框、复选框、下拉菜单、文本域的实现代码
2020/12/01 HTML / CSS
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
缓刑人员的思想汇报
2014/01/11 职场文书
党员学习群众路线教育实践活动对照检查材料
2014/09/23 职场文书
党员个人整改措施
2014/10/24 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
敬老院志愿者活动总结
2015/05/06 职场文书
汉语拼音教学反思
2016/02/22 职场文书
解读Vue组件注册方式
2021/05/15 Vue.js
一行Python命令实现批量加水印
2022/04/07 Python