2017-10-22 12 views
1

私はCodeIgniter 3.1.6を使ってアプリケーションを構築しています。私は運用サーバー上のサブドメインでテストを行っていました。私はメインのドメインをそのフォルダに向け、config.phpの$ base_urlも正しいURLに変更しました。 (config.php内の$ cookie_domainは決して設定されていません)。Codeigniter移行後にセッションが動作しない

ただし、セッションデータは現在動作していません。私はいくつかのテストを試して、セッションデータを設定し、1つのコントローラ内で読み取ることができます。

$this->session->set_userdata('name', $name); 
echo $this->session->userdata('name'); 

ただし、これはURL全体では機能しません。例:

// controllers/Contact.php 
$this->session->set_userdata('name', $name); 

// controllers/Welcome.php 
echo $this->session->userdata('name'); 

これは別のドメインで動作しない理由は何ですか?

+0

はあなたが'$ name'変数が空でないことを確認してください。 'var_dump($ this-> session-> name)'のときに何を得ますか? –

+0

チェック:https://stackoverflow.com/a/46855322/2275490 – Vickel

+0

@Vickel。ありがとう、あなたのリンクでは、セッションデータを使用しているときにCodeIgniter 3.1.6とPHP 7.1の問題を示唆しています。ドメインが7.1で動作していることを認識しませんでした。それを返信として投稿してください。 – user1949366

答えて

3

$this->session->set_userdata('name', $name);

$this->session->set_userdata('name', $name);作品が、関数userdata()が一つだけの引数を受け入れ、それが文字列

ことを期待をサポートしていないPHPのバージョン7.1およびCI 3.1.6の非互換性のために報告されたいくつかの問題がありました

セッション・ライブラリー(/system/libraries/Session/Session.php)に見れば、あなたは近く行

747見つけることができます:

/** 
* Userdata (fetch) 
* 
* Legacy CI_Session compatibility method 
* 
* @param string $key Session data key 
* @return mixed Session data value or NULL if not found 
*/ 
public function userdata($key = NULL) 
{ 
    if (isset($key)) 
    { 
     return isset($_SESSION[$key]) ? $_SESSION[$key] : NULL; 
    } 
    elseif (empty($_SESSION)) 
    { 
     return array(); 
    } 

    $userdata = array(); 
    $_exclude = array_merge(
     array('__ci_vars'), 
     $this->get_flash_keys(), 
     $this->get_temp_keys() 
    ); 

    foreach (array_keys($_SESSION) as $key) 
    { 
     if (! in_array($key, $_exclude, TRUE)) 
     { 
      $userdata[$key] = $_SESSION[$key]; 
     } 
    } 

    return $userdata; 
} 

その代わりに、あなたはこのようなネイティブの$ _SESSIONと$name=array('firstname'=>'mr smith')ような配列を取得することができます

セット:GET

$_SESSION['name']=$name; 

または

$this->session->set_userdata('name', $name); 

echo $_SESSION['name']['firstname']; //etc.. 
関連する問題