程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> CI框架實現cookie登陸的方法詳解

CI框架實現cookie登陸的方法詳解

編輯:PHP綜合

本文實例講述了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相關內容感興趣的讀者可查看本站專題:《codeigniter入門教程》、《CI(CodeIgniter)框架進階教程》、《php優秀開發框架總結》、《ThinkPHP入門教程》、《ThinkPHP常用方法總結》、《Zend FrameWork框架入門教程》、《php面向對象程序設計入門教程》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家基於CodeIgniter框架的PHP程序設計有所幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved