Codeigniter会话只适用于一个页面,而不适用于链接到该页的其他页面


codeigniter session only work for one page not for other pages linked to the page

我用用户名和密码登录到页面,它将成功登录,该页面有其他页面的链接,但我将用户名设置为会话变量,但它会说会话不可用。

    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');
 }
}
?>

是否有可能将用户重定向到其他服务器?会话只在同一域中可用。从PHP手册:

访问您网站的访问者被分配一个唯一的id,即所谓的会话id。这要么存储在用户端的cookie中,要么在URL中传播。

会话支持允许您在$_SESSION超全局数组中存储请求之间的数据。当访问者访问您的站点时,PHP将自动检查(如果会话)。Auto_start设置为1),或者根据请求(显式地通过session_start()或隐式地通过session_register())是否发送了特定的会话id。如果是这种情况,将重新创建先前保存的环境。

我用过这本手册,也许它能帮你找到你的错误。

如果一切正常,还有一件事要检查会话文件是否正在创建。可能有权限问题。要检查这一点,创建一个页面:

<?php phpinfo(); ?>

确保session.save_path目录存在并且是可写的,并且如果您想要自动启动会话,则将session.auto_start设置为on。也可以手动启动:session_start();

设置它,在php.ini文件(通常位于/etc/php.ini):

session.auto_start = 1

更改sessions文件夹,更改session.save_path:

session.save_path = "/path/to/session_files"
相关文章: