CodeIgniter"flashdata"不起作用

Kat*_*ntz 11 php session codeigniter

我使用CodeIgniter 2.1.0,我想在数据库中插入数据后得到一条消息,如"您的信息已成功更新.".对于这项工作,我在CI_Controller中有以下功能:

function myCiInser(){
... Here is my query ...
//$data: this var is result query that is true
if($data){
    $this -> session -> set_flashdata('message', 'Your information was successfully updated.');
    redirect('url/myurl');
            }
}
Run Code Online (Sandbox Code Playgroud)

我认为:

<?php
$message = $this->session->flashdata('message');
    if($message){
        echo '<div id="error_text">' . $message . '</div>';
    }
//I test this : "echo $message;" but don't give output
?>
Run Code Online (Sandbox Code Playgroud)

但我不会在视野中给出消息,但redirect已完成并且正常工作.在表格ci_sessions列的数据库中user_data我有这个:

a:2:{s:9:"user_data"; s:0:""; s:19:"flash:new:message"; s:42:"您的信息已成功更新.";}

怎么解决这个问题?

更新:

我有以下错误(我使用chorme并通过Ctrl + Shift + ji获取此警报):

无法加载资源:服务器响应状态为404(未找到)

我修复它(现在我没有错误)但在显示消息中仍然是同样的问题.我该怎么办?

Que*_*cia 18

Codeigniter 会话类文档中,关于Flashdata,我们可以阅读:

CodeIgniter支持"flashdata"或仅可用于下一个服务器请求的会话数据,然后自动清除.

您的问题可能是,当您重定向时,该过程需要多个请求,清除您的flashdata.

要查看是否是这种情况,只需将以下代码添加到要重定向到的控制器的构造函数中:

$this->session->keep_flashdata('message');
Run Code Online (Sandbox Code Playgroud)

这将使flashdata保留另一个服务器请求,允许它在之后使用.


小智 12

我也有这个问题.我不记得我在哪里看到了,但这是我的解决方案.

redirect('url/myurl','refresh');
Run Code Online (Sandbox Code Playgroud)

CodeIgniter没有将重定向视为另一个请求.所以flashdata没有设置在重定向中,但它是在我加载的下一页上.