重定向后 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 3 中重定向后 Flashdata 未清除
重定向后 CodeIgniter flashdata 不起作用