【问题标题】:CodeIgniter Flashdata doesn't work on serverCodeIgniter Flashdata 在服务器上不起作用
【发布时间】:2013-06-06 15:12:11
【问题描述】:

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

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

我是这样设置数据的:

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

这就是我检索它的方式:

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

有什么想法吗?

【问题讨论】:

  • flashdata 需要使用会话库 - 保存在数据库或 cookie 中(基于配置文件中的值)。不应该缺少任何 apache 或 php 才能使其正常工作。要么是您在写入数据库时​​遇到问题,要么是在 cookie 中创建数据时存在安全问题。

标签: codeigniter


【解决方案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”。

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

【讨论】:

  • 没有数据库,没有安全会话。其他会话变量正在工作。我用代码更新了帖子。
【解决方案2】:

检查 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-02
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多