Codeigniter会话在迁移后无法正常工作

时间:2017-10-22 15:42:27

标签: php codeigniter session

我有一个使用CodeIgniter 3.1.6构建的应用程序。我正在生产服务器上的子域上进行测试。我将主域指向该文件夹,并将config.php中的$ base_url更改为正确的URL。 (config.php中的$ cookie_domain从未设置过。)

但是,会话数据现在无法正常工作。我尝试了一些测试,可以在一个控制器中设置和读取会话数据。

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

但是,这不适用于网址。例如:

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

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

关于为什么这可能不适用于其他域名的任何想法?

2 个答案:

答案 0 :(得分:4)

针对PHP版本7.1和CI 3.1.6的不兼容性报告了几个问题,不支持$this->session->set_userdata('name', $name);

好吧,$this->session->set_userdata('name', $name);有效,但函数userdata()只接受一个参数,并期望它是一个字符串

如果查看会话库(/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')这样的数组:

设置:

$_SESSION['name']=$name; 

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

获取:

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

答案 1 :(得分:0)

打开: 系统/库/Session/Session.php

session_start(); to // session_start();

并更改:

    ini_set('session.use_trans_sid', 0);
    ini_set('session.use_strict_mode', 1);
    ini_set('session.use_cookies', 1);
    ini_set('session.use_only_cookies', 1);
    ini_set('session.hash_function', 1);
    ini_set('session.hash_bits_per_character', 4);

收件人

  /* ini_set('session.use_trans_sid', 0);
    ini_set('session.use_strict_mode', 1);
    ini_set('session.use_cookies', 1);
    ini_set('session.use_only_cookies', 1);
    ini_set('session.hash_function', 1);
    ini_set('session.hash_bits_per_character', 4); */

最后编辑打开的/index.php添加到顶部:

session_start(); 

已解决。