2011-08-10 112 views
0

我有一個用戶控制器,檢查登錄用戶。它有這段代碼。我可以設置set_userdata並在我的視圖中回顯它,但這不適用於我的Flash數據,如下所示。codeigniter set_userdata工作,但不輸出set_flashdata,在相同的代碼

public function login() 
    { 
     if($this->input->post('submit_login')) 
     { 
      // Get Posted Vars 
      $username = $this->input->post('username'); 
      $password = md5($this->input->post('password')); 

      // Run query to return 1 result if TRUE 
      $query = $this->user_model->check_login($username, $password); 

      if ($query == FALSE) 
      { 
       $this->session->set_flashdata('flashdata', 'Incorrect Username or Password doesnt show'); 
       $this->session->set_userdata('userdata', 'userdata works'); 
       // Query was wrong, set flash data and redirect to login 
       $data['main_content'] = "user/login"; 
       $data['title'] = "Login"; 
       $this->load->view('template', $data); 
      } 
      else // Else Query returned 1 item 
      { 
       // Get the Variables 
       $user_id = $query->row(0)->id; 
       $username = $query->row(0)->username; 
       $user_email = $query->row(0)->email; 
       $user_type = $query->row(0)->type; 

       // Load up the userdata array 
       $userdata = array(
        'logged_in' => TRUE, 
        'user_id' => $user_id, 
        'username' => $username, 
        'user_email' => $user_email, 
        'user_type' => $user_type 
        ); 

       // Execute the set_userdata, to our session 
       $this->session->set_userdata($userdata); 

       $data['main_content'] = "Admin/index"; 
       $data['title'] = "Administrator"; 
       $this->load->view('template', $data); 
      } 
     } 
     elseif ($this->session->userdata('logged_in') == TRUE) 
     { 
      $this->index(); 
     } 
     else 
     { 
       $data['main_content'] = "user/login"; 
       $data['title'] = "Login"; 
       $this->load->view('template', $data); 
     } 

然後在我的觀點:

<form action="<?php echo base_url(); ?>user/login" method="POST" id="login_form"/> 
<p>Please Login Below</p> 
<span class="notice"><?php echo $this->session->flashdata('flashdata'); ?></span> 
<span class="label">Username:</span><input type="text" name="username"/><br/> 
<span class="label">Password:</span><input type="password" name="password"/><br/> 
<input type="submit" name="submit_login" value="Login"/> 
</form> 
<?php echo $this->session->flashdata('flashdata'); ?> 
<br/> 
<?php echo $this->session->userdata('userdata'); ?> 

爲什麼犯規flashdata說明了什麼?

+0

向我們展示您的整個代碼... – jondavidjohn

回答

2

flashdata在codeigniter中只存在於一個額外請求的會話中,然後被銷燬。如果您無意中試圖通過單個請求使用它,那麼當您嘗試訪問它時,它就不會存在。只要會話存在,即可存在userdata

UPDATE

尋找更多的代碼後,它看起來像這種情況是因爲你沒有實際重定向(創建下一個請求),在這裏,你只是加載一個觀點.. 。

 if ($query == FALSE) 
     { 
      $this->session->set_flashdata('flashdata', 'Incorrect Username or Password doesnt show'); 
      $this->session->set_userdata('userdata', 'userdata works'); 
      // Query was wrong, set flash data and redirect to login 
      $data['main_content'] = "user/login"; 
      $data['title'] = "Login"; 
      $this->load->view('template', $data); //<---- See? 
     } 

而是做到這一點...

 if ($query == FALSE) 
     { 
      $this->session->set_flashdata('flashdata', 'Incorrect Username or Password doesnt show'); 
      $this->session->set_userdata('userdata', 'userdata works'); 
      // Query was wrong, set flash data and redirect to login 
      redirect("uri/path/to/login"); 
     } 
+0

我明白,但它不顯示在第一個請求。我添加了更多的代碼。 – Anil

+0

謝謝!工作!,我明白,我只是加載一個視圖,這是相同的要求。但我必須重定向下一個請求。 – Anil

1

的價值:

echo $this->session->flashdata('flashdata'); 

將在第二次刷新頁面。

實際上,這個值存儲在cookie中。

相關問題