2016-07-01 33 views
1

我完全卡在這裏,我創建了一個控制器登錄它獲得,設置規則和身份驗證數據庫,並在代碼結束時設置會話。 另外我有另一個控制器儀表板,它顯示儀表板,也必須使用會話來查看會話是否設置,如果真正的用戶可以使用控制器,否則重定向到登錄頁面。這就是它 但我不能在儀表板中獲得會話,我應該在這裏做什麼?codeigniter不在另一個控制器檢索會話

<?php 
defined('BASEPATH') OR exit('No direct script access allowed'); 

class Login extends CI_Controller 
{ 

    /** 
    * Login constructor. 
    */ 
    public function __construct() 
    { 
     parent::__construct(); 

     //Load Form helper 
     $this->load->helper('form'); 

     //Load form validation library 
     $this->load->library('form_validation'); 
    } 

    /** 
    *Display Login page 
    */ 
    public function index() 
    { 

     $title['title'] = 'Admin login'; 
     $this->load->view('login', $title); 
    } 


    /** 
    * 
    * Set rules for authentication 
    * 
    * @return bool 
    */ 
    public function rules() 
    { 

     $rules = array(
      array(
       'field' => 'username', 
       'label' => 'Username', 
       'rules' => 'trim|required|xss_clean' 
      ), 
      array(
       'field' => 'password', 
       'label' => 'Password', 
       'rules' => 'trim|required|xss_clean' 
      ), 
      array(
       'field' => 'remember', 
       'label' => 'Remember', 
       'rules' => 'trim|int|xss_clean' 
      ) 
     ); 

     $this->form_validation->set_rules($rules); 

     if ($this->form_validation->run() != FALSE) { 
      $this->authentication(); 
     } else { 

      $title['title'] = 'Admin login'; 
      $this->load->view('login', $title); 
     } 
    } 

    /** 
    * Check if user is exist 
    */ 
    public function authentication() 
    { 

     $data = array(
      'username' => $this->input->post('username', true), 
      'password' => $this->input->post('password', true) 
     ); 

     $this->load->model('userData'); 
     if ($this->userData->getUserData($data) == FALSE) { 

      $title['title'] = 'Admin login'; 
      $this->load->view('login', $title); 
     } else { 

      $this->set_session($data); 
      redirect('dashboard/index'); 
     } 

    } 

    /** 
    * @param $data username|password 
    */ 
    public function set_session($data) 
    { 

     $session_data = array(
      'username' => $data['username'], 
      'login' => true 
     ); 

     $this->session->set_userdata('auth', $session_data); 
    } 

} 

這裏是儀表板:

<?php 
defined('BASEPATH') OR exit('No direct script access allowed'); 


class Dashboard extends CI_Controller{ 

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

    } 

    /** 
    * Display dashboard 
    */ 
    public function index(){ 


     $array = $this->session->userdata('auth'); 
     $login = $array['login']; 

     if ($login == true) { 
      $title['title'] = 'Dashboard'; 
      $this->template->load('panel/dashboard', $title); 
     }else{ 
      redirect('login/index'); 
     }  
    } 
} 

回答

0

你正在做錯誤的做法。你不能訪問函數外的$_post值。以及你不需要authentication()函數。

當你調用這個函數if ($this->form_validation->run() != FALSE),如果它的PASS,那麼在這裏添加``authentication()`函數代碼。然後你可以設置會話。


的代碼

$this->form_validation->set_rules($rules); 

if ($this->form_validation->run() != FALSE) { 
    $data = array(
     'username' => $this->input->post('username', true), 
     'password' => $this->input->post('password', true) 
    ); 

    $this->load->model('userData'); 
    if ($this->userData->getUserData($data) == FALSE) { # Uncler this point 

     $title['title'] = 'Admin login'; 
     $this->load->view('login', $title); 
    } else { 

     $this->set_session($data); 
     redirect('dashboard/index'); 
    } 
} else { 

    $title['title'] = 'Admin login'; 
    $this->load->view('login', $title); 
} 
+0

樣品'如果($這個 - > userData-> getUserData($數據)== FALSE)'那就是從數據庫中選擇數據模型類的結果。 但還有一點,我可以使用此方法在登錄控制器中回顯會話,但爲什麼它在儀表板中不起作用? – nima

+0

@nima按照我的方式 –

+0

好吧我正在嘗試老兄! ;) – nima

相關問題