2017-10-22 2 views
1

Ich habe eine Anwendung mit CodeIgniter 3.1.6 erstellt. Ich führte Tests auf einer Sub-Domain auf dem Produktionsserver durch. Ich habe die Hauptdomain auf den Ordner gerichtet und auch $ base_url in der config.php auf die korrekte URL geändert. ($ cookie_domain in der config.php wurde nie gesetzt.)Codeigniter Sessions funktioniert nicht nach der Migration

Sitzungsdaten funktionieren jedoch nicht. Ich habe einige Tests versucht, die Sitzungsdaten können innerhalb eines Kontrollers eingestellt werden und gelesen werden.

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

Dies funktioniert jedoch nicht über URLs. Zum Beispiel:

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

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

Irgendwelche Ideen, warum kann das nicht auf einer anderen Domain arbeiten?

+0

Sind Sie sicher, dass die '$ name'-Variable nicht leer ist? Was bekommst du, wenn du 'var_dump ($ this-> session-> name)' '? –

+0

überprüfen Sie: https://Stackoverflow.com/a/46855322/2275490 – Vickel

+0

@Vickel. Danke, in Ihrem Link schlägt es ein Problem mit CodeIgniter 3.1.6 und PHP 7.1 bei der Verwendung von Sitzungsdaten vor. Realisierte nicht, dass die Domäne 7.1 ausgeführt wurde. Post es als Antwort und ich werde +1 – user1949366

Antwort

3

Es wurden mehrere Fragen zur Unvereinbarkeit von PHP-Version 7.1 und CI berichtet 3.1.6 nicht $this->session->set_userdata('name', $name);

gut unterstützt, $this->session->set_userdata('name', $name); Werke, aber die Funktion userdata() akzeptiert nur ein Argument und erwartet, dass ein String sein

wenn man sich in der Sitzung Bibliothek (/system/libraries/Session/Session.php), werden Sie in der Nähe von Zeile

747 finden:

/** 
* 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; 
} 

aber alternativ können Sie ein Array wie $name=array('firstname'=>'mr smith') mit nativer $ _SESSION wie folgt holen:

Satz:

$_SESSION['name']=$name; 

oder

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

get:

echo $_SESSION['name']['firstname']; //etc.. 
Verwandte Themen