CodeIgniter“flashdata”不起作用

时间:2011-11-29 08:20:18

标签: php codeigniter session

我使用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');
            }
}

我认为:

<?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
?>

但是我不会在视图中给出消息,但是redirect已经完成并且正常工作。在表ci_sessionsuser_data的数据库中,我有:

  

一个:2:{S:9: “的user_data”; S:0: “”; S:19: “闪光:新的:消息”; S:42:“您的   信息已成功更新。“;}

如何解决这个问题?

更新

我遇到以下错误(我使用chorme并通过Ctrl + Shift + j获取此警告):

  

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

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

12 个答案:

答案 0 :(得分:18)

从Codeigniter Session Class documentation,关于 Flashdata ,我们可以阅读:

  

CodeIgniter支持“flashdata”,或者只支持会话数据   可用于下一个服务器请求,然后自动执行   清零。

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

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

$this->session->keep_flashdata('message');

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

答案 1 :(得分:12)

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

redirect('url/myurl','refresh');

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

答案 2 :(得分:3)

//在我们的控制器文件中设置闪存数据

$this->session->set_flashdata('sessionkey', 'Value');

//之后我们需要使用重定向功能

redirect("admin/signup");

//在视图中获取Flash数据

$this->session->flashdata('sessionkey');

答案 3 :(得分:2)

使用数据库会话有时会引起我的问​​题。我建议在 config.php 中设置$config['sess_use_database'] = FALSE;,看看flashdata是否正常工作。

答案 4 :(得分:2)

您也可以使用数据库进行会话,但必须设置配置项:

$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = FALSE;

以这种方式,会话flashdata将再次运行

答案 5 :(得分:1)

除了一页,我能够使用session显示/传递值。我尝试使用var_dump($this->session)并获得:

["flash:old:Array"]=> bool(false)
["flash:new:message"]=> string(10) "My Message"

我尝试在设置数据后回显页面中的flash数据而不重定向,但结果是一样的。我建议减少代码,并尝试在其他页面中设置会话。如果问题仍然存在,请检查var_dump。这可能不是解决方案,但我认为它可以提供帮助。

  

更新:修剪文本中的空格和换行符   工作。我正在传递两个长句子,空行和空格。

if (0) //Assume this condition is false
{   
    $this->load->view('error_page');
    // Generate validation error
}
else
{
    //Show success message
    $data = array(
                'message' => 'My message'
                           );
    $this->session->set_flashdata($data);
    $this->session->keep_flashdata($data);                      
    echo $this->session->flashdata('message');
    //echo var_dump($this->session);
    //redirect(base_url().'success_page');
}

答案 6 :(得分:1)

我遇到了同样的问题。在检查了我找到的代码后,我正在调用$this->session->sess_destroy();,这会导致问题。

答案 7 :(得分:0)

404(未找到)计为1个服务器请求。它将删除你的flashdata。

答案 8 :(得分:0)

当我观察codeigniter flashdata时。 当我在使用codeigniter redirect()方法的第二个请求中使用它时,它在mozila中正常工作,但在chrome的情况下它不起作用。

答案 9 :(得分:0)

我知道我已经很晚了,但我遇到了这个问题而且我无法相信在我的情况下解决方案很容易

只需替换

$this->session->flashdata('message');

print_r($this->session->flashdata('message'));

答案 10 :(得分:0)

我打开了Chrome开发者控制台,并删除了Flashdata。将其关闭并重试后即可。 版本71.0.3578.98(正式版本)(64位)

答案 11 :(得分:0)

我将其用于闪存数据,并且易于使用。 首先,需要创建会话,然后在控制器的方法中,在要重定向页面之前使用它。

在创建会话后在Controller上,不要忘记加载会话和url库。

$this->session->set_flashdata('success', 'Oops. This email id already exist.' );
redirect("You Mehod or page");

在这种情况下,您无需转到特定的查看页面即可添加额外的php代码。

然后在footer.php上查看此脚本代码之后的

<!-- Code for flashdata toaster -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/css/toastr.min.css">
<script type="text/javascript">
    <?php if($this->session->flashdata('success')){ ?>
        toastr.success("<?php echo $this->session->flashdata('success'); ?>");
    <?php }else if($this->session->flashdata('error')){  ?>
        toastr.error("<?php echo $this->session->flashdata('error'); ?>");
    <?php }else if($this->session->flashdata('warning')){  ?>
        toastr.warning("<?php echo $this->session->flashdata('warning'); ?>");
    <?php }else if($this->session->flashdata('info')){  ?>
        toastr.info("<?php echo $this->session->flashdata('info'); ?>");
    <?php } ?>
</script>
<!-- End of flashdata script -->

祝您好运,希望对您有帮助。