【问题标题】:CodeIgniter "flashdata" doesn't workCodeIgniter“flashdata”不起作用
【发布时间】:2011-11-29 08:20:17
【问题描述】:

我使用 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 的数据库中我有这个:

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

如何解决这个问题?

更新:

我遇到了以下错误(我从 chorme 使用,按 Ctrl+Shift+j 我收到此警报):

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

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

【问题讨论】:

  • 是不是打错了,但是你把flashdata分配给$message_p,但是echo $message?
  • 不,请再看我的帖子。
  • 有什么解决办法吗?我看到使用数据库会话时 flashdata 不起作用。
  • 感谢您的更新。从视图中删除一些 404(未找到)项目后,我的 flashdata 工作正常。我认为 404 将算作一个服务器请求。
  • 嗨,这是个老问题,但你是如何解决这个问题的,我也遇到了这个问题

标签: php codeigniter session


【解决方案1】:

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

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

您的问题可能是当您重定向时,该过程需要多个请求,从而清除您的闪存数据。

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

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

这将为另一个服务器请求保留闪存数据,以便以后使用。

【讨论】:

  • 我测试了keep_flashdata 但不起作用,仍然是同样的问题。 keep_flashdataflashdata 有什么区别?
  • keep_flashdata() 方法不应该替换 flashdata()。 keep_flashdata() 通过附加请求保留 flashdata 变量。您应该阅读我发布的链接上的文档。
  • 是否有必要重定向页面以保留闪存数据。我的问题是第一次闪存数据工作正常,但是当我刷新页面时,闪存数据消息被清除。
  • @MusaddiqKhan 嗯,这就是闪存数据的全部意义所在。一旦您在第一个请求中阅读它,它就会在下一个请求中被清除。如果无论执行多少请求都需要保留数据,请使用默认会话方法,而不是 Flash 方法。
  • 我敢打赌,您认为是第二个请求,实际上是第三个请求,到那时您已经丢失了数据。
【解决方案2】:

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

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

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

【讨论】:

  • 是的,删除刷新似乎可以修复 FF 中的“刷新”错误。所有浏览器都在没有“刷新”的情况下确认重定向。
  • 感谢您的评论,它对我有用 - redirect('url/myurl','refresh');
【解决方案3】:

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

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

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

redirect("admin/signup");

// 获取视图上的 Flash 数据

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

【讨论】:

  • @AlphaMale 请您说明您的问题。
  • 问题是我对我的闪存消息使用相同的代码。但突然之间他们不再工作了。
【解决方案4】:

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

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

这样会话闪存数据将再次工作

【讨论】:

  • 宾果游戏,那是我的问题。这一定是一个错误,我的意思是我们不能以安全的方式同时使用 cookie 和 flashdata?使用 Laravel 的人可以给我们意见吗?
【解决方案5】:

使用数据库会话有时会给我带来问题。我建议在 config.php 中设置$config['sess_use_database'] = FALSE; 并查看 flashdata 是否正常工作。

【讨论】:

    【解决方案6】:

    除了一页,我可以使用会话显示/传递值。我尝试使用 var_dump($this-&gt;session) 并得到:

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

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

    UPDATE :修剪文本中的空格和换行符 工作。我传递了两个带有空换行符和空格的长句子。

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

    【讨论】:

      【解决方案7】:

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

      【讨论】:

        【解决方案8】:

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

        【讨论】:

          【解决方案9】:

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

          【讨论】:

            【解决方案10】:

            我知道我很晚了,但我遇到了这个问题,我不敢相信在我的情况下解决方案非常简单

            只是替换

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

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

            【讨论】:

              【解决方案11】:

              我打开了 Chrome 开发者控制台并删除了 flashdata。关闭它并重试后它可以工作。 版本 71.0.3578.98(正式版)(64 位)

              【讨论】:

                【解决方案12】:

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

                创建会话后在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 -->
                

                祝你好运,希望对您的问题有所帮助。

                【讨论】:

                  猜你喜欢
                  • 2015-09-15
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-10-18
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-07-28
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多