您好,登錄后才能下訂單哦!
怎么在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模型 }
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。