5

我正在使用 Codeigniter 2.1.4,但我遇到了一些关于 flashdata 的问题。当我成功提交记录时,我可以显示 flashdata 消息。但是,如果从显示 flashdata 消息的页面转到另一个页面,然后使用浏览器后退按钮返回上一页,它会再次显示 flashdata 消息。
使用后如何清除 flashdata 消息? 我认为它不是 flashdata 问题它的缓存问题。我很困惑为什么会这样。如果它的缓存问题那么如何删除它?

下面是我用过的代码,

//In the manage of controller
$this->session->set_flashdata('message', "Record updated successfully.");

// In the view of controller
$data['message'] = $this->session->flashdata('message');

// In the view page
echo $message;
4

9 回答 9

5

Flash仅在下次刷新后消失

于 2013-09-17T09:45:48.530 回答
4

您在控制器中的代码是正确的

//In the manage of controller
$this->session->set_flashdata('message', "Record updated successfully.");
redirect('controller_name/function_name','refresh');

现在考虑像这样使用

if($this->session->flashdata('message')){echo $this->session->flashdata('message');}

希望它会工作

于 2013-09-17T09:50:01.657 回答
1

必须在之后将页面重定向到某处 $this->session->set_flash('item','value');

示例

if ($this->form_validation->run() == FALSE){
    $this->session->set_flashdata('error',validation_errors());
    redirect(base_url().'user/login');
}
else{
    $this->session->set_flashdata('success','Thank you');
    redirect(base_url().'user/login');
}

通常开发人员在向同一页面提交数据时会出错。他们设置闪存数据但忘记重定向。

于 2014-03-01T17:42:23.997 回答
1

如果你想清除控制器或其他视图文件中的 set_flash,那么你可以使用这个简单的代码。

$this->session->set_flashdata('error', 'User not found...'); //create set_flash

销毁set_flash

//echo "<pre>"; print_r($_SESSION); die; //for check 

if(isset($_SESSION['error'])){
    unset($_SESSION['error']);
}
于 2016-08-22T05:22:53.087 回答
0
$this->session->set_flashdata('message', "Record updated successfully.");

设置 flashdata 后重定向到某个功能或相同的功能。

于 2013-09-17T09:48:48.730 回答
0

如果在同一个控制器函数中刷新,flashdata不会被删除。在浏览器中来回切换也不影响flashdata。清除 flashdata 重定向到另一个控制器功能,它将起作用。

于 2016-07-06T17:28:56.677 回答
0

看起来这将在 3.1.12 中修复:https ://github.com/bcit-ci/CodeIgniter/pull/6013

于 2022-01-13T06:23:18.657 回答
0

由于 Code igniter 不提供销毁 flashdata 的可能性,因此您可以通过第二次虚构调用 flashdata 函数而不使用 echo 来解决此问题:

if ($this->session->flashdata('message')) :
    echo $this->session->flashdata('message'); // First normal call
    $this->session->flashdata('message'); // Second fictitious call
endif;
于 2021-06-21T19:24:41.287 回答
0

转到 System->libries->Session->session.php 找到 flshdata 功能并替换为

public function flashdata($key = NULL)
{
    if (isset($key))
    {
        $return= (isset($_SESSION['__ci_vars'], $_SESSION['__ci_vars'][$key], $_SESSION[$key]) && ! is_int($_SESSION['__ci_vars'][$key]))
            ? $_SESSION[$key]
            : NULL;
            unset($_SESSION[$key]);
            return $return;
    }

    $flashdata = array();

    if ( ! empty($_SESSION['__ci_vars']))
    {
        foreach ($_SESSION['__ci_vars'] as $key => &$value)
        {
            is_int($value) OR $flashdata[$key] = $_SESSION[$key];
        }
    }
    unset($_SESSION[$key]);
    return $flashdata;
}
于 2021-08-21T21:42:23.113 回答