【发布时间】:2015-05-27 17:58:04
【问题描述】:
你好 CodeIgniter 用户。
我的闪存数据有问题,我需要一些帮助。我的 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:。我通过检查session->all_userdata() 的内容确认了我的keep_all_flashdata() 功能正常工作,并且一切看起来都符合预期。
我正在使用一些 AJAX 调用,但它们不应擦除 flash 数据(一个已知问题),因为我在清除 flashdata 之前使用$this->CI->input->is_ajax_request() 阻止了此操作(在sess_update() 和_flashdata_sweep() 函数中)。
这是 CodeIgniter 中的错误还是我做错了什么?任何帮助表示赞赏。
【问题讨论】:
标签: php codeigniter session