CodeIgniter闪存数据在本地工作但不在服务器上工作

时间:2015-05-27 17:58:05

标签: php codeigniter session

Hello CodeIgniter用户。

我有flash数据的问题,我想要一些帮助。我的CI版本是2.1.4。

我正在使用CI闪存数据临时存储包含多个页面的表单的数据。存储在每个页面上的数据,以便可以在下一页上访问它,最后所有数据都输入到数据库中。

现在为了保持数据存储在多个页面而不是一个页面,我使用以下函数扩展了Session类:

function keep_all_flashdata($prefix = '')
{
    $userdata = $this->all_userdata();
    foreach ($userdata as $key => $value)
    {
        if (strpos($key, ':old:' . $prefix))
        {
            $new_flashdata_key = str_replace(':old:', ':new:', $key);
            $this->set_userdata($new_flashdata_key, $value);
        }
    }
}

此功能可保留所有闪存数据(或可选地仅保留以某个字符串开头的闪存数据)以进行其他重定向。它类似于keep_flashdata函数,除了它适用于多个项目而不需要它们的确切名称。

调用此函数后,:old::new:个键都存储在会话数据中。然后在重定向之后,删除旧密钥并将新密钥设置为旧密钥。然后,如果有另一页,我再次拨打keep_all_flashdata(),依此类推,直到最后一页。

当我在我的本地WAMP服务器上工作时这很好用,但在我的实际服务器上,所有flashdata都会在重定向后被删除,即使密钥中有:new:。我通过检查keep_all_flashdata()的内容确认我的session->all_userdata()函数有效,所有内容都按预期显示。

我正在使用一些AJAX调用,但是他们不应该删除闪存数据(一个已知问题),因为我在清除flashdata之前使用$this->CI->input->is_ajax_request()阻止了这一点(在sess_update()和{_flashdata_sweep()中{ {1}}功能)。

这是CodeIgniter中的错误还是我做错了什么?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

我认为你的if语句导致了这个问题。我假设":旧:"或":新:"用作会话中存储的每个密钥的前缀吗?

strpos()返回针存在的位置,以便在检查带有前缀':old:'的键时为0。那个用作旧flashdata的意图需要删除。我测试了以下代码:

$flashDataKey = ':new:myKey';

die(var_dump(strpos($flashDataKey, ':old:')));

由于未找到针,因此返回false。导致不将flashdata存储为':old:'并保留下一个请求。

我不确定为什么这对你的localhost有效。您应该将if语句更改为:

if( strstr($key, ':new:') !== false)

现在只有包含字符串':new:'将通过,其他一切将返回false。希望这有帮助!