我正在使用CodeIgniter的flashdata存储我的验证码字以用于下一个请求。它在本地站点上运行正常,但在服务器上运行不正常。两个代码没有区别。
我想知道flashdata功能是否需要apache / php的任何其他插件或配置。
以下是我设置数据的方法:
$this->session->set_flashdata('captchaWord', $cap['word']);
这就是我检索它的方式:
if (strcasecmp($this->input->post('captchaWord'), $this->session->flashdata('captchaWord')) != 0)
有什么想法吗?
答案 0 :(得分: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'。
如果是,那么您的代码就会出现问题。如果没有,那么我建议加载一个带有操作系统的虚拟机并安装一个新的网络服务器副本并重试。
答案 1 :(得分:0)
检查Codeigniter是否正在调用控制器两次,在这种情况下,它将清除第一次和第二次呼叫之间的闪存数据(请参阅Codeigniter flash data not working in certain browsers的答案)。
有一些Codeigniter案例,可以调用两次控制器。例如,基于Codeigniter构建的GoCart购物车包具有辅助功能,可通过将http更改为https并重定向到新URL来强制SSL。如果在构造函数中使用该函数,则控制器最终被调用两次,一次不使用SSL,一次使用SSL。第二次通话时,任何flashdata都会丢失。
根据另一个类似问题(CodeIgniter: setting flash data not working),您可以使用$ CI-> session-> keep_flashdata()来保留其他请求中的flashdata。
此页面上的答案很好地解释了问题和解决方法:CodeIgniter "flashdata" doesn't work