0

ログインに成功するページにユーザー名とパスワードでログインし、そのページには他のページへのリンクがありますが、ユーザー名をセッション変数に設定していますが、セッションが利用できないと表示されます。

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

}

?>
4

1 に答える 1

1

ユーザーが別のサーバーにリダイレクトされる可能性はありますか? セッションは同じドメインでのみ利用できます。PHPマニュアルから:

Web サイトにアクセスする訪問者には、一意の ID、いわゆるセッション ID が割り当てられます。これは、ユーザー側の Cookie に保存されるか、URL で伝達されます。

セッションのサポートにより、リクエスト間のデータを $_SESSION スーパーグローバル配列に保存できます。訪問者がサイトにアクセスすると、PHP は自動的に (session.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

セッション フォルダーを変更するには、以下を変更しsession.save_pathます。

session.save_path = "/path/to/session_files"
于 2013-05-26T13:58:33.270 に答える