$this->session->set_flashdata() 然后 $this->session->flashdata() 在 codeigniter 中不起作用
Posted
技术标签:
【中文标题】$this->session->set_flashdata() 然后 $this->session->flashdata() 在 codeigniter 中不起作用【英文标题】:$this->session->set_flashdata() and then $this->session->flashdata() doesn't work in codeigniter 【发布时间】:2012-10-18 01:16:10 【问题描述】:请看下面的代码:
$this->session->set_flashdata('message', 'This is a message.');
var_dump($this->session->flashdata('message'));
它返回bool(false)
。
我希望它不会需要 redirect()
在此之后被召回,因为有时我需要在视图中设置 flashdata 后立即调用它.
编辑在venkat的评论之后
$this->session->set_flashdata('message', 'This is a message.');
$this->session->keep_flashdata('message');
var_dump($this->session->flashdata('message'));
遗憾的是没有区别。
【问题讨论】:
CodeIgniter 支持“flashdata”,即仅可用于下一个服务器请求的会话数据,然后自动清除。如果您想通过附加请求保留闪存数据,请使用此 $this->session->keep_flashdata('message');如果我错了,请告诉我............ 谢谢你亲爱的@Venkat,但没有区别。我更新了我的问题。 可能 flashdata 只能在下一个服务器请求时检索?当然还要确保您使用加密密钥等正确加载了会话。 是的,你是对的。当然,我已经将这些配置设置为使用会话。 【参考方案1】:嗯,documentation 确实说明了这一点
CodeIgniter 支持“flashdata”或会话数据 可用于下一个服务器请求,然后自动 清除。
首先,这显然意味着您需要执行新的服务器请求。 重定向、刷新、链接或其他方式将用户发送到下一个请求。
如果您在同一个请求中使用 flashdata,为什么还要使用它呢?您最好不要使用 flashdata 或使用常规会话。
【讨论】:
谢谢你,是的,我在问完我的问题后阅读了文档!!!无论如何希望我可以使用flashdata
,因为用于此类目的的真正意思是flashdata
,而不是正常会话。另一个原因是现在我必须以更手动的方式使用它,因为我应该考虑在显示消息会话后取消设置它们。
不一定 - 一个选项是 extend CI 使用您自己的会话库,它允许在设置闪存数据后直接访问它。
自动清除?那么不会自动清除的替代方案是什么? @Repox
@gumuruh 另一种方法是不使用 flashdata,而只使用会话数据或 cookie。【参考方案2】:
// Set flash data
$this->session->set_flashdata('message_name', 'This is my message');
// After that you need to used redirect function instead of load view such as
redirect("admin/signup");
// Get Flash data on view
$this->session->flashdata('message_name');
【讨论】:
【参考方案3】:要设置 flashdata,您需要重定向控制器功能
$this->session->set_flashdata('message_name', 'This is test message');
//redirect to some function
redirect("controller/function_name");
//echo in view or controller
$this->session->flashdata('message_name');
【讨论】:
【参考方案4】:在 Codeigniter 中重定向后显示一条 flash 消息
在你的控制器中设置这个
<?php
public function change_password()
if($this->input->post('submit'))
$change = $this->common_register->change_password();
if($change == true)
$messge = array('message' => 'Password chnage successfully','class' => 'alert alert-success fade in');
$this->session->set_flashdata('item', $messge);
else
$messge = array('message' => 'Wrong password enter','class' => 'alert alert-danger fade in');
$this->session->set_flashdata('item',$messge );
$this->session->keep_flashdata('item',$messge);
redirect('controllername/methodname','refresh');
?>
In Your View File Set this
<script type="application/javascript">
/** After windod Load */
$(window).bind("load", function()
window.setTimeout(function()
$(".alert").fadeTo(500, 0).slideUp(500, function()
$(this).remove();
);
, 4000);
);
</script>
<?php
if($this->session->flashdata('item'))
$message = $this->session->flashdata('item');
?>
<div class="<?php echo $message['class'] ?>"><?php echo $message['message']; ?>
</div>
<?php
?>
请查看以下链接以获取Displaying a flash message after redirect in Codeigniter
【讨论】:
【参考方案5】:更改您的 config.php:
$config['sess_use_database'] = TRUE;
收件人:
$config['sess_use_database'] = FALSE;
它对我有用。
【讨论】:
但这在我的 codeigniter 3 配置中不存在。@Crashed【参考方案6】:重定向后的闪存消息将在控制器中不可见。 在视图中显示获取控制器的操作并将其传递给视图
【讨论】:
以上是关于$this->session->set_flashdata() 然后 $this->session->flashdata() 在 codeigniter 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用php的SESSION直接保存对象序列化,但反序列化时出错