2013-05-26 91 views
0

我已登錄用戶名和密碼到它將登錄成功的頁面,該頁面有其他頁面的鏈接,但我設置用戶名到會話變量,但它會說會話不是availabe。codeigniter會話只適用於一個頁面不適用於鏈接到頁面的其他頁面

verifylogin.php 

    <?php 

class VerifyLogin extends CI_Controller { 



function __construct() 
{ 
    parent::__construct(); 
    $this->load->model('login/user','',TRUE); 
} 

function index() 
{ 
    //This method will have the credentials validation 
    $this->load->library('form_validation'); 

    $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean'); 
    $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database'); 

    if($this->form_validation->run() == FALSE) 
    { 
    //Field validation failed.&nbsp; User redirected to login page 

    $this->load->view('index'); 

    } 
    else 
    { 
     //$this->load->view('home_view'); 
    //Go to private area 
    $password = $this->input->post('password'); 
    if($this->check_data($password)) 
    { 
    redirect('login_f/home', 'refresh'); 
    } 
    else 
    { 
     $data['username'] = $this->input->post('username'); 
     $data['rannum'] = $this->send_confirm_email();  
     $this->load->view('/login/verify_code2',$data); 
    } 
    } 

} 

function check_database($password) 
{ 
    //Field validation succeeded.&nbsp; Validate against database 
    $username = $this->input->post('username'); 
    $this->load->model('login/user'); 


    //query the database 
    $result = $this->user->login($username, $password); 
    $value = $this->user->user_type($username); 


    if($result) 
    { 


    if($value == 0) 
    { 
     $sess_array = array(); 
     foreach($result as $row) 
     { 
      $sess_array = array(
      //'id' => $row->id, 
      'username' => $row->username 
      ); 
      $this->session->set_userdata('logged_in', $sess_array); 
     } 
     return TRUE; 
    } 


    } 
    else 
    { 
    $this->form_validation->set_message('check_database', 'Invalid username or password'); 
    return false; 
    } 
} 

    function check() 
    { 
     $this->load->view('index'); 
    } 





} 
?> 

home.php 


<?php 
session_start(); //we need to call PHP's session object to access it through CI 
class Home extends CI_Controller { 

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

function index() 
{ 
    if($this->session->userdata('logged_in')) 
    { 
    $session_data = $this->session->userdata('logged_in'); 
    $data['username'] = $session_data['username']; 
    $this->load->view('login/home_view', $data); 
    } 
    else 
    { 
    //If no session, redirect to login page 


    redirect('login_f/login', 'refresh'); 


    } 
} 

function logout() 
{ 
    $this->session->unset_userdata('logged_in'); 
    session_destroy(); 
    redirect('login_f/home', 'refresh'); 
} 

} 

?> 
+1

你能發佈一些相關的代碼?謝謝。 – Tom

+0

我認爲這是相關的 – user2422387

回答

1

是否有機會將用戶重定向到不同的服務器?該會話僅在同一個域上可用。來自PHP手冊:

訪問您的網站的訪問者被分配一個唯一的ID,即所謂的會話ID。這可以存儲在用戶端的cookie中,也可以在URL中傳播。

會話支持允許您在$ _SESSION超全局數組中的請求之間存儲數據。當訪問者訪問您的站點時,PHP會自動檢查(如果session.auto_start設置爲1)或您的請求(顯式地通過session_start()或通過session_register())隱式檢查特定會話ID是否與請求一起發送。如果是這種情況,則重新創建之前保存的環境。

我用this manual,也許它會幫助你找到你的錯誤。

如果一切看起來沒問題,還有一件事要檢查會話文件是否正在創建。可能存在權限問題。檢查此,創建一個頁面:

<?php phpinfo(); ?> 

確保該session.save_path目錄存在且可寫,而且session.auto_start設定爲開啓,如果你想自動啓動會話。您也可以通過運行命令session_start()手動啓動它;

設置它,在php.ini文件(通常位於/etc/php.ini中):

session.auto_start = 1 

改變會話文件夾,更改session.save_path

session.save_path = "/path/to/session_files" 
+0

我的session.auto_start已關閉是否有問題 – user2422387

+0

對此很重要 – user2422387

+0

如何在session.auto_start上更新 – user2422387

相關問題