2017-04-25 107 views
2

我對Codegniter框架相當陌生。我想設置一個會話到我的網站,但只要我點擊我的瀏覽器的後退按鈕,它會轉到我的網站的主(登錄)頁面,當我點擊下一頁時,頁面顯示未找到。另外,在歡迎頁面上,我有一個用戶按鈕,當我點擊它時,它也會將我帶到我的登錄頁面,但會話數據仍然存在。CodeIgniter會話錯誤

這裏是我的控制器(的welcome.php)代碼:

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

class Welcome extends CI_Controller { 


    public function index() 
    { 
     $this->home(); 
    } 

    public function home() 
    { 
     if($this->session->all_userdata('is_logged_in')==1){ 
      $this->load->view('welcome_message'); 
     } 
     else{ 
      $data['title'] = 'ABC'; 
      $this->load->view('login', $data); 
     } 
    } 

function loginapi() 
{  
    if ($this->session->all_userdata('is_logged_in')==1) { 
     $this->load->view('welcome_message', $this->session->all_userdata); 
    } 
    else{ 
     $this->load->library('form_validation'); 
     $this->form_validation->set_rules('username','Username','required'); 
     $this->form_validation->set_rules('password','Password','required'); 
     if ($this->form_validation->run()) { 
      $username = $this->input->post('username'); 
      $password = $this->input->post('password');  
      $payload = json_encode(array("username"=> $username, 
"password"=> $password)); 
      $curl_handle = curl_init(); 
      curl_setopt($curl_handle, CURLOPT_URL, 
'../api/dashboard/login'); 
      curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); 
      curl_setopt($curl_handle, CURLOPT_POST, 1); 
      curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $payload); 

      $buffer = curl_exec($curl_handle); 
      $httpcode = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE); 

      curl_close($curl_handle); 
      var_dump($httpcode); 
      $result = json_decode($buffer); 
      var_dump($result->empid); 

      if($httpcode == 200) 
      { 
       echo 'User has been updated.'; 
       $this->load->driver('session'); 
       //return $result; 
       $data['empid'] = $result->empid; 
       $data['username']=$this->input->post('username'); 
       $data['password']=$this->input->post('password'); 
       $data['title'] = 'ABC'; 
       $data['is_logged_in'] = '1'; 
       $this->session->set_userdata($data); 

       $this->load->view('welcome_message', $data); 
      } 

      else 
      { 
       echo 'Something has gone wrong'; 
      } 
     } 
    else{ 
     $this->load->view('login'); 
     } 
    } 
} 

function getdata() 
{  
      if ($this->session->all_userdata('is_logged_in')==1) { 

      $curl_handle = curl_init(); 
      curl_setopt($curl_handle, CURLOPT_URL, 
'../api/dashboard/getUser'); 
      curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); 
      $buffer = curl_exec($curl_handle); 
      $httpcode = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE); 

      curl_close($curl_handle); 
      var_dump($httpcode); 
      $result = json_decode($buffer); 
      var_dump($result); 

      if($httpcode == 200) 
      { 

       //return $result; 
       $data['response'] = $result; 
       $this->load->view('hr', $data); 
      } 

      else 
      { 
       echo 'Something has gone wrong'; 
      } 
     } 
     else{ 
      $this->load->view('login'); 
    } 
} 
public function logout(){ 
    $this->session->sess_destroy(); 
    redirect('welcome/home'); 
} 

} 

我的會話數據是這樣的:

{ 
    '__ci_last_regenerate' => int 1493105150 
    'empid' => string '13' (length=2) 
    'username' => string '[email protected]' (length=18) 
    'password' => string 'password' (length=6) 
    'title' => string 'ABC' (length=12) 
    'is_logged_in' => string '1' (length=1) 
} 

我的login.php查看:

<?php 
defined('BASEPATH') OR exit('No direct script access allowed'); 
?> 
    <!DOCTYPE html> 
    <html lang="en"> 

    <head> 
    <meta charset="utf-8"> 
    <title> 
     <?php echo $title; ?> 
    </title> 


    </head> 

    <body> 

    <div id="container"> 
     <h1> 
     <?php echo "login"; ?> 
     </h1> 

     <?php 

    echo form_open('welcome/loginapi'); 
    echo validation_errors(); 
    echo "<p>Username: "; 
    echo form_input('username'); 
    echo "</p>"; 

    echo "<p>Password: "; 
    echo form_password('password'); 
    echo "</p>"; 

    echo "<p>"; 
    echo form_submit('login_submit','Login'); 
    echo "</p>"; 
    echo form_close(); 
    var_dump($this->session->all_userdata()); 
    ?> 

     <p class="footer">Page rendered in <strong>{elapsed_time}</strong> 
seconds. 
      <?php echo (ENVIRONMENT === 'development') ? 'CodeIgniter 
Version <strong>' . CI_VERSION . '</strong>' : '' ?></p> 
    </div> 

    </body> 

    </html> 

我的welcome_message.php視圖

<?php 
defined('BASEPATH') OR exit('No direct script access allowed'); 
?><!DOCTYPE html> 
<html lang="en"> 
<head> 
     <meta charset="utf-8"> 
     <title><?php echo $title; ?></title> 
</head> 
<body> 

<div id="container"> 
    <h1><?php echo "welcome page"; ?></h1> 

    <div id="body"> 
     <?php   
      //var_dump($empid); 
      var_dump($this->session->all_userdata('password')); 
      echo form_open('welcome/getdata'); 
      echo form_hidden('_hidden_field',$this->session- 
>all_userdata('empid')); 
      echo "<p>"; 
      echo form_submit('get_user','Users'); 
      echo "</p>"; 
      echo form_close(); 
     ?> 
     <?php   
      echo form_open('welcome/logout'); 
      echo "<p>"; 
      echo form_submit('logout','Logout'); 
      echo "</p>"; 
      echo form_close(); 
     ?> 
    </div> 

    <p class="footer">Page rendered in <strong>{elapsed_time}</strong> 
seconds. <?php echo (ENVIRONMENT === 'development') ? 'CodeIgniter Version 
<strong>' . CI_VERSION . '</strong>' : '' ?></p> 
</div> 

</body> 
</html> 

編輯: 當我點擊用戶按鈕,它需要我通過getdata函數hr.php,當我回去它帶我到welcome_message.php,但從welcome_message.php當我按下前進按鈕它告訴我重新提交

這是我的看法hr.php:

<?php 
defined('BASEPATH') OR exit('No direct script access allowed'); 
?><!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <title><?php echo $title; ?></title> 
</head> 
<body onunload=""> 

<div id="container"> 
    <h1><?php echo "Human Resource Management"; ?></h1> 

    <div id="body"> 
     <div class="row"> 
       <div class="col-lg-12"> 
        <h1>Human Resource Management</h1> 
        <?php   
      echo form_open('welcome/registeruser'); 
      echo "<p>"; 
      echo form_submit('get_user','Register'); 
      echo "</p>"; 
      echo form_close(); 
     ?> 
       <br> 
       <br> 
       </div> 
      </div> 
     <div class="row"> 
       <div class="col-lg-12"> 
        <div class= "panel panel-default"> 
         <div class="panel-heading"> 
          <h4>Registered Employees</h4> 
         </div> 
         <div class="panel-body"> 
         <table class="table table-hover"> 
         <thead> 
          <tr> 
           <th>Name</th> 
           <th>Gender</th> 
           <th>E-mail</th> 
           <th>Contact No.</th> 
           <th>Username</th> 
           <th>Emp ID</th> 
           <th>Department</th> 
           <th>Designation</th> 

          </tr> 
         </thead> 
         <tbody> 
       <?php 
        foreach ($response as $object) { 
        ?> 

       <tr> 

        <td><?php echo $object->firstname; ?>&nbsp<?php echo 
    $object->lastname; ?></td> 
        <td><?php echo $object->gender; ?></td> 
        <td><?php echo $object->email; ?></td> 
        <td><?php echo $object->contactno; ?></td> 
        <td><?php echo $object->username; ?></td> 
        <td><?php echo $object->empid; ?></td> 
        <td><?php echo $object->department; ?></td> 
        <td><?php echo $object->designation; ?></td> 
        <td><?php   
      echo form_open('welcome/deleteuser'); 
      echo $object->empid; 
      $empid=$object->empid; 
      $department=$object->department; 
      echo form_hidden('empid',$empid); 
      echo form_hidden('department',$department); 
      echo "<p>"; 
      echo form_submit('get_user','Delete'); 
      echo "</p>"; 
      echo form_close(); 
     ?></td> 

       </tr> 

        <?php 
       }?> 
         </tbody>  
        </table> 
         </div> 
        </div> 
       </div> 
      </div> 
    </div> 

    <p class="footer">Page rendered in <strong>{elapsed_time}</strong> 
seconds. <?php echo (ENVIRONMENT === 'development') ? 'CodeIgniter 
Version 
<strong>' . CI_VERSION . '</strong>' : '' ?></p> 
</div> 

</body> 
</html> 

我想在我的網站維護會話,直到用戶選擇註銷(摧毀它)。 預先感謝您。

+0

all_userdata()被更多的閱讀[這裏](https://www.codeigniter.com/user_guide/libraries/sessions.html) –

回答

3

你需要使用$this->session->userdata('is_logged_in')爲獲取會話值

+0

這解決了我的問題。謝謝。 我還希望我的網站可以通過點擊瀏覽器中的後退按鈕在頁面之間來回切換,但它總是讓我重新提交表單 –

+0

,您需要在點擊後退按鈕時刷新頁面。請參閱此[問題](http://stackoverflow.com/questions/20899274/how-to-refresh-page-on-back-button-click) –

+0

@GopalBhuva我試着把'onunload =「」'在我的身體標記但它不適用於前進按鈕。我不知道答案中的新PHP文件應該如何集成。 –

2

你應該改變這一行,檢查會話值

if($this->session->all_userdata('is_logged_in')==1){ 
      $this->load->view('welcome_message'); 
    } 

由於

if($this->session->userdata('is_logged_in')==1) 
{ 
    $this->load->view('welcome_message'); 
} 

您可以使用===運營商在更好的方法

//as your session value is string 
if($this->session->userdata('is_logged_in')=== '1') 
    { 
    $this->load->view('welcome_message'); 
}