Codeigniter Sessions not working after migration

There have been several issues reported for incompatibility of PHP version 7.1 and CI 3.1.6 not supporting $this->session->set_userdata('name', $name);

well, $this->session->set_userdata('name', $name); works, but the function userdata() accepts only one argument and expects it to be a string

if you look into session library (/system/libraries/Session/Session.php), you’ll find near row

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

but alternatively you can fetch an array like $name=array('firstname'=>'mr smith') with native $_SESSION like this:

set:

$_SESSION['name']=$name; 

or

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

get:

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

Leave a Comment