2017-11-27 1 views
0

ユーザーがシステムにログインしたときにユーザーIDを保存し、ユーザーをダッシュ​​ボードページとダッシュボードにリダイレクトする私たちはユーザIDから値を取得します。このシステムはローカルホストで完璧に動作しますが、ライブサーバでホストすると問題が発生します。Codeigniterセッションがログインページからダッシュボードページにリダイレクトされたときにセッションが値を保存していない

ライブサーバでユーザがログインしたときに、 (セッションの値を表示するとユーザーのIDが表示されますが)値が削除されるダッシュボードにリダイレクトされるとき

ログインページのコードを参照

<?php 
class Login extends CI_Controller 
{ 
    public function index() 
    { 
     $this->load->view('Login_v'); 
    } 
    public function Login_user() 
    { 
     $uname=$_POST['username']; 
     $pwd=$_POST['password']; 
     $this->load->model('Login_m'); 
     $data=$this->Login_m->get_user($uname,$pwd); 
     $this->load->library('session'); 
     if($data!=NULL) 
     { 
      $id=$data[0]->sid; 
      $sdata=array('sid' => $id); 
      $this->session->set_userdata($sdata); 
       /* echo '<script type="text/javascript"> 
       window.location = "http://cmsgroupnigdi.com/admission/dashboard" 
       </script>';*/ 
       echo '<script type="text/javascript"> 
       window.location = "http://localhost/admission/dashboard" 
       </script>'; 
      exit(); 
     } else { 
      $data="Invalid Login Details"; 
      $this->load->view('Login_v',['data'=>$data]); 
     } 
    } 
} 
?> 

私は

Array ([__ci_last_regenerate] => 1511755625) 

セッション/クッキー$の設定、それを印刷するとき、私は

Array ([__ci_last_regenerate] => 1511755625 [sid] => 1) 

とダッシュボードページに印刷するとき、これは、ログインページ上の私のセッションの配列である - アプリケーション/設定.php

$config['sess_driver'] = 'files'; 
$config['sess_cookie_name'] = 'ci_session'; 
$config['sess_expiration'] = 7200; 
$config['sess_save_path'] = NULL; 
$config['sess_match_ip'] = FALSE; 
$config['sess_time_to_update'] = 300; 
$config['sess_regenerate_destroy'] = FALSE; 

$config['cookie_prefix'] = ''; 
$config['cookie_domain'] = '.cmsgroupnigdi.com/admission/';; 
$config['cookie_path'] = '/'; 
$config['cookie_secure'] = FALSE; 
$config['cookie_httponly'] = FALSE; 
+0

config.phpで '$ config ['cookie_domain']'を確認してください。 – Pratansyah

+0

$ config ['cookie_domain'] \t = ''; –

+0

さて、この答えを見てください。https://stackoverflow.com/a/19024706/2131856 – Pratansyah

答えて

0

不思議なことに、あなたのコードはいくつかの変更を加えて動作します。 まだ検証などを追加する必要がありますが、これはデバッグの練習です。

私はコードを読んでいくつかのことを変えて、あなたの可能な "次の質問"を防ぐことができました。

私が行ったことは、デバッグを追加してスクリプトのモックアップを作成することでした。

だからあなたの "ログイン" コントローラ - Login.php

class Login extends CI_Controller { 

    public function __construct() { 
     parent::__construct(); 
     $this->load->library('session'); 
     $this->load->helper('url'); 

     $this->load->model('login_m'); 
    } 

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

    public function Login_user() { 
     // Debug - View Posted Data 
     var_dump($_POST); 

     // @todo Requires Validation 
     $uname = $_POST['username']; 
     $pwd = $_POST['password']; 
     $data = $this->login_m->get_user($uname, $pwd); 

     // Debug - Data from Model 
     var_dump($data); 

     if ($data != NULL) { 
      $id = $data[0]->sid; 
      $sdata = array('sid' => $id); 
      $this->session->set_userdata($sdata); 

      // Debug - View The Session data 
      var_dump($this->session->userdata); 
      // exit required to view the var_dump outputs 
      // in this method so prevent the redirect 
      // Comment it out to allow the redirect 
      //exit(); 

      redirect("admission/dashboard"); 
      exit(); 
     } else { 
      // Debug - View The Session data 
      var_dump($this->session->userdata); 

      $error_message = "Invalid Login Details"; 
      $this->session->set_flashdata('error_message',$error_message); 
      redirect('login',$data); 
     } 

    } 
} 

ダミーモデル - Login_m。PHP

class Login_m extends CI_Model { 

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

    /** 
    * Simulate a good and bad login. 
    */ 
    public function get_user($uname, $pwd) { 

     // use for successful login testing 
     $return_array[]= (object)array('sid'=>1); 

     // use for failed login testing 
     $return_array = NULL; 

     return $return_array; 
    } 
} 

とビュー - login_v.php(注:私はそれが小文字製)

<h2>This is the Login View</h2> 
<?php 
// $error_message isn't always passed in so we need to cater for that 
$error_message = $this->session->flashdata('error_message'); 

if (! empty($error_message)): ?> 
    <div> 
     <p> <?= $error_message; ?></p> 
    </div> 
<?php endif; ?> 

<form action="login/login_user" method="POST"> 
    <label>username</label> 
    <input type="text" name="username" value=""> 
    <br> 
    <label>password</label> 
    <input type="password" name="password" value=""> 
    <br> 
    <input type="submit" name="check_login" value="Login"> 
</form> 

これを行うには多くの方法があります。前述のように、検証などを行う必要がありますが、これはまず何かです。

0

セッション変数を使用して試してください。ここで私はあなたのダッシュボードページでは

redirect()

redirect('admission/dashboard'); 

を使用することができ、あなたのログインページでセッション変数

として

$this->session->set_userdata('admin', $data); 

の代わりwindow.location管理を使用しています

$admindata = $this->session->userdata('admin'); 
print_r($admindata); 
+0

ダッシュボードページには表示されませんが、ダッシュボードページには値は表示されません –

0

ログイン機能のためだけにセッションライブラリをロードしています。 configフォルダのautoload.phpファイルにセッションをロードして、システムのどこにでもアクセスしてみてください。たぶんあなたがアクセスすることができない理由です。

$autoload['libraries'] = array('database','session'); 

希望すると、これが役に立ちます。

+0

ライブラリは自動ロードされていますが動作しません –

0

私は同じ問題に直面していた可能性があります。PHPバージョンで確認してください。初心者はPHPバージョン7.1を使用していて、セッションが機能していなかったので、同じ問題に直面していました。その後、PHPバージョン7.0に変更したところ、うまくいきました。

PHPバージョンをご利用いただけます。それは解決するのに役立つだろう。

コードイグナイターSYSTEMフォルダーを最新のバージョンに変更してください。おそらくそれはあなたの問題を解決するでしょう。彼らはセッションに関するいくつかのバグを修正しました。

0

ありがとう、私は素晴らしい提案を与えるために皆私は問題を解決した私はバニラPHPセッションライブラリを使用します。ありがとうございます

関連する問題