0

我在正在运行的项目中面临与会话相关的问题。所以我想用简单的代码重新复制并检查会话。所以我下载了 Codeigniter 2.1.3 的新副本,并在自动加载中添加了会话库。我还在配置文件中设置了 5 位加密密钥。然后我刚刚在欢迎控制器中创建了以下 2 个方法:

public function gettingSess() {
    echo '<pre>';
    print_r($this->session->all_userdata());
    echo '</pre>';
    exit;
}

public function settingSess() {
    $arr = array('start' => '456');
    for($i=0;$i <= 999;$i++) {
        $arr['lets_test' . $i] = $i * 100;
    }
    $this->session->set_userdata('sessVar', $arr);
    echo '<pre>';
    print_r($this->session->all_userdata());
    echo '</pre>';
    exit;
}

然后首先我运行http://mydomain.com/ci/index.php/welcome/settingSess,它的输出如下,非常完美:

    Array (
    [session_id] => dd0a684ab53e937309ee9fdbcf24468f
    [ip_address] => 127.0.0.1
    [user_agent] => Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0
    [last_activity] => 1371458835
    [user_data] => 
    [sessVar] => Array
        (
            [start] => 456
            [lets_test0] => 0
            [lets_test1] => 100
            .
            .
            [lets_test999] => 99900
        )

)

然后我运行http://mydomain.com/ci/index.php/welcome/gettingSess,它的输出如下:

Array(
[session_id] => dd0a684ab53e937309ee9fdbcf24468f
[ip_address] => 127.0.0.1
[user_agent] => Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0
[last_activity] => 1371458835
[user_data] => 

)

请建议我做错了什么以及问题是什么,为什么我没有在getSess方法中获取会话变量。

谢谢。

4

4 回答 4

0

尝试这个:

 $this->session->set_userdata($arr);

set_userdata如果它们是“键”、“值”类型,则只接受两个元素 - 其中第二个元素必须是字符串(无数组),例如$this->session->set_userdata('some_name', 'some_value');- 参见手册

于 2013-06-17T11:37:19.150 回答
0

我不完全确定这是否会有所帮助,但是,关于跨多个文件运行会话,我也遇到了与会话相关的问题。我不得不联系主机提供者并要求他们运行特定代码:您可能需要检查此线程: PHP File Cannot Recover Session Variable Across Pages

于 2013-06-17T09:01:47.137 回答
0

$config['cookie_secure'] = FALSE; 在 config/autoload.php 中设置。

如果设置为 true,cookie 将仅在存在安全连接时设置,即当网站在 HTTPS 上运行时。

会话数据存储在用户的 cookie 中。Cookies只能保存4KB的数据,注意不要超过容量。尝试设置单个会话值

$this->session->set_userdata('some_name', 'some_value');
于 2013-06-17T11:55:57.370 回答
0

可能是您的会话设置不正确。所以最好你创建一个函数然后设置你的会话然后获取会话。尝试如下代码

public function demo()
{
     $this->settingSess();
     $this->gettingSess();
}

在你 gettingSess() 函数中添加如下一行

public function gettingSess() 
{

   print_r($this->session->all_userdata());

   echo $this->session->userdata('sessVar');
   exit;
}
于 2013-06-17T09:14:16.820 回答