$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 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp session获取问题

使用php的SESSION直接保存对象序列化,但反序列化时出错

用redis存储session,要用session_set_save_handler()函数

如何在codeigniter中获取IP地址?

CI:提交成功后的结算表

Web Api Session开启会话支持