0

我正在使用 CodeIgniter 的 flashdata 来存储我的验证码以用于下一个请求。它在本地站点上运行良好,但在服务器上却不行。两种代码没有区别。

我想知道 flashdata 功能是否需要任何额外的插件或 apache/php 配置。

这是我设置数据的方式:

$this->session->set_flashdata('captchaWord', $cap['word']);

这就是我检索它的方式:

if (strcasecmp($this->input->post('captchaWord'), $this->session->flashdata('captchaWord')) != 0)

有任何想法吗?

4

2 回答 2

1

它没有。您的服务器发生了一些奇怪的事情。

如果您正在使用数据库会话,请检查是否正在建立数据库连接。

检查您要重定向到的实际上是同一台服务器。

检查您是否正确使用了 flashdata。(邮政编码?)

检查会话变量是否正常工作。

更新:

// Again, be sure that 'session' is autoloaded in config.php
class Test_Controller {
    public function page1()
    {
        $this->session->set_flashdata('test', 'HELLO WORLD');
        redirect('test/page2');
    }
    public function page2()
    {
        echo $this->session->flashdata('test');
    }
}

添加此控制器并访问http://yourserver.com/index.php/test/page1

它应该重定向到 page2 并显示“HELLO WORLD”。

如果是这样,那么这是您的代码的问题。如果没有,那么我建议使用操作系统加载虚拟机并安装网络服务器的新副本并重试。

于 2013-06-06T15:19:51.760 回答
0

检查 Codeigniter 是否调用了控制器两次,在这种情况下,它会在第一次和第二次调用之间清除 flashdata(参见Codeigniter flash data not working in certain browsers的答案)。

在 Codeigniter 的情况下,控制器可能会被调用两次。例如,基于 Codeigniter 构建的 GoCart 购物车包有一个辅助函数,通过将 http 更改为 https 并重定向到新 URL 来强制 SSL。如果在构造函数中使用该函数,则控制器最终会被调用两次,一次不使用 SSL,一次使用 SSL。第二次调用会丢失任何闪存数据。

根据另一个类似的问题(CodeIgniter: setting flash data not working),您可以使用 $CI->session->keep_flashdata() 在其他请求中保留 flashdata。

此页面上的答案很好地解释了问题和解决方法:CodeIgniter "flashdata" doesn't work

于 2013-12-25T00:45:50.723 回答