2016-04-24 26 views
1

我使用時出現問題check_login函數。
當我輸入http://localhost/shopping/admin/login並輸入管理員用戶名和密碼時,它不會重定向到主頁管理頁面。但是當我嘗試 http://localhost/shopping/admin。它仍然會重定向到登錄頁面檢查登錄並重定向Codeigniter不工作?

/** 
* MY_Controller constructor. 
*/ 
class MY_Controller extends CI_Controller 
{ 
    public $data = array(); 
    function __construct() 
    { 
     parent::__construct(); 
     // $this->load->library('session'); 

     $controller = $this->uri->segment(1); 
     switch ($controller) { 
      case 'admin': { 
       $this->load->helper('admin'); 
       $this->_check_login(); 
       break; 
      } 
      default: { 

      } 
     } 
    } 

    /* 
    * Check login admin 
    */ 
    function _check_login() 
    { 
     $controller = $this->uri->rsegment('1'); 
     $controller = strtolower($controller); 
     $login = $this->session->userdata('login'); 
     //redirect to login if not logged in. 
     if (!$login && $controller != 'login') { 
      redirect(admin_url('login')); 
     } 
     //redirect to home if login successful. 
     if ($login && $controller == 'login') { 
      redirect(admin_url('home')); 
     } 
    } 
} 

/* 
* admin_helper 
*/ 
function admin_url($url = '') 
{ 
    return base_url('admin/'.$url); 
} 

但是當我刪除

//redirect to login if not logged in. 
if (!$login && $controller != 'login') { 
    redirect(admin_url('login')); 
} 

後,我用我的管理員登錄,它重定向到主頁成功。

爲什麼它不起作用?

/* 
    * Controller login 
    */ 
class Login extends MY_Controller 
{ 

    function index() 
    { 

     $this->load->library('form_validation'); 
     $this->load->helper('form'); 

     if ($this->input->post()) { 
      $this->form_validation->set_rules('login', 'login', 'callback_check_login'); 
      if ($this->form_validation->run()) { 
       $this->session->set_userdata('login', true); 

       redirect(admin_url('home')); 
      } 
     } 
     $this->load->view('admin/login/index'); 
    } 

    /* 
    * Kiem tra login 
    * */ 
    function check_login() 
    { 
     /* 
     $this->load->library('form_validation'); 
     $this->load->helper('form'); 
     */ 
     $username = $this->input->post('username'); 
     $password = $this->input->post('password'); 
     $password = md5($password); 

     $this->load->model('admin_model'); 
     $where = array('username' => $username, 'password' => $password); 
     if ($this->admin_model->check_exists($where)) { 
      return TRUE; 
     } 
     $this->form_validation->set_message(__FUNCTION__, 'Login fail.'); 
     return FALSE; 


    } 
} 
+0

你在哪裏設置不檢查用戶是否驗證過 控制器值當用戶點擊登錄按鈕時會話? –

+0

@SoravGarg sr,我編輯! – hyphens2

+0

你在哪裏編輯我無法找到你的改變 –

回答

1

我仍然無法找到你正在使用會話我的意思是集會議通常我們使用$this->session->set_userdata('user_login_data');我認爲這是在你的代碼失蹤。

<?php 

class Welcome extends CI_Controller{ 

    function __construct() 
    { 
     parent::__construct(); 
    } 

    public function index() 
    { 
     $adminId = $this->session->userdata('unique_id'); 
     if(empty($adminId)){ 
      $this->load->view('login'); 
     }else{ 
      redirect('home/dashboard'); 
     } 
    } 

    public function login() 
    { 
     $username = $this->input->post('username'); 
     $password = base64_decode($this->input->post('password')); 
     $arr = array(
      'username' => $username, 
      'password' => md5($password), 
      'user_type' => 'admin' 
      ); 
     $result = $this->common_model->getMultiple('panel_login',$arr); 
     if(!empty($result)){ 
      $this->session->set_userdata('unique_id',$result[0]['s_no']); 
      $this->session->set_userdata('username',$result[0]['username']); 
      $this->session->set_userdata('password',$result[0]['password']); 
      $this->session->set_userdata('type',$result[0]['user_type']); 
      $this->session->set_userdata('status',$result[0]['status']); 
      $this->session->set_userdata('user_activity',time()); 
     } 
     echo json_encode($result); 
    } 
} 

?> 

您的幫助,我還附上我的演示代碼,用戶登錄我希望它會幫助你..

+0

請按照這個腳本... –

1

下面的語句

if (!$login && $controller != 'login') { 
      redirect(admin_url('login')); 
    } 

將始終返回true,因爲$登錄將永遠是false,因爲你沒有在set_userdata中設置它的值,並且$ controller將始終返回admin作爲控制器,因爲你使用段1作爲索引。所以你正在重定向到登錄頁面。

*設置會話correcty和檢查只​​有會話值,如果會話值登錄未設置爲true重定向到loign否則在此功能重定向到主頁

+0

謝謝你的回覆:)它的工作原理 – hyphens2