重定向后 CodeIgniter flashdata 不起作用

Posted

技术标签:

【中文标题】重定向后 CodeIgniter flashdata 不起作用【英文标题】:CodeIgniter flashdata not working after redirect 【发布时间】:2015-09-15 22:12:46 【问题描述】:

我已经这样设置了flash数据

$this->session->set_flashdata('dispMessage','my message is here'));

我在会话库中找到了该消息,但未显示在重定向页面中。 我使用的是codeigniter 2.2.0版。

谁能帮忙...?

【问题讨论】:

echo $this->session->flashdata('dispMessage') 得到什么? 你能在你的重定向页面中提供 html/php 吗?您也可以提供您的控制器代码吗?..您也收到任何错误吗? 添加flashdata: $this->session->set_flashdata('item', 'value');您还可以将数组传递给 set_flashdata(),方式与 set_userdata() 相同。读取 flashdata 变量: $this->session->flashdata('item'); 确保您的会话处于活动状态。只有将 flashdata 添加到活动的会话中时,falshdata 才应该起作用。检查您是否在设置 flashdata 之前添加了 sess_destroy() 函数 【参考方案1】:

根据session class page of the manual:

CodeIgniter 支持“flashdata”或会话数据 可用于下一个服务器请求,然后自动 清除。这些可能非常有用,通常用于 信息或状态消息(例如:“记录 2 已删除”)。

尝试在重定向之前立即在脚本中保留 flashdata,如下所示:

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

【讨论】:

【参考方案2】:
// Set flash data 
$this->session->set_flashdata('dispMessage', 'This is my message');
// After that you need to used redirect function instead of load view such as 
redirect("yourcontroller/controllermethod");

// Get Flash data on view 
$this->session->flashdata('dispMessage');

【讨论】:

我已经写了和你上面提到的一样的代码,但是没有用。 如何在不加载页面的情况下显示错误?对于没有负载的情况,您应该使用 JS。哈哈【参考方案3】:

对我而言,flashdata 无法正常工作,因为在我调用 flashdata 时会话未激活或未设置。 我的场景是,一旦用户登录,用户就会被重定向到特定页面,在该页面中写入的条件很少,以检查用户是否具有查看它所需的权限。如果用户没有权限,页面将被重定向到登录页面,并在警报中显示错误消息。此错误消息是通过 flashdata 设置的。当在控制器中设置 flashdata 时,用户会话还没有激活。因此没有设置 flashdata 并且没有显示错误消息。 我希望这可以解决像我这样有类似情况的人的问题。

要检查会话是否处于活动状态,请在设置 flashdata 之前使用以下 sn-p:

 if ($this->session->has_userdata('username')) 
       echo json_encode(TRUE);
  else 
       echo json_encode(FALSE);
 
 exit;

如果它是假的,那么你的会话还没有激活。

【讨论】:

以上是关于重定向后 CodeIgniter flashdata 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter:动态登录后重定向?

在 CodeIgniter 3 中重定向后 Flashdata 未清除

重定向后 CodeIgniter flashdata 不起作用

在codeigniter中重置密码后如何重定向

在 CodeIgniter 4 中提交表单后重定向页面无法工作

在codeigniter中如何使用ajax登录后重定向