CodeIgniter:能够在不重定向的情况下获取闪存数据

时间:2017-02-28 07:00:32

标签: php codeigniter session flash-message

我使用Code Igniter已经有一段时间了,而且我理解"会话/ flash数据仅在重定向/页面重新加载后才能工作"。我在本地主机上发现的一件有趣的事情是,我可以设法获取闪存数据而无需重新加载/重定向页面。任何人都可以向我解释这是如何运作的?我希望我不能收到任何消息。 在控制器中:

$this->session->set_flashdata("success", "worked");
$this->load->view('layouts/main');

在主视图中:

<p class = 'bg-success'>
<?php if($this ->session->flashdata('success')): ?>

<?php echo $this ->session->flashdata('success');?>


<?php endif; ?>

</p>

执行此操作后,我可以查看闪存数据的工作情况。它是如何工作的?是不是CI闪存数据只会出现在下一个用户请求中?(即重定向/页面重新加载?)。我刚刚设置了闪存数据后加载了一个视图,理论上它应该不起作用,并且不应该出现任何消​​息,因为这只是第一个请求。

2 个答案:

答案 0 :(得分:0)

CodeIgniter支持flashdata或仅适用于next request的会话数据,然后自动cleared。这非常有用,特别是对于一次性信息,错误或状态消息。

有关详情,请参阅Codeigniter Session

答案 1 :(得分:0)

如果您想显示没有重定向页面的会话数据,那么您应该在codeigniter中使用$this->session->userdata()

控制器代码

$this->session->set_userdata('msg', "Done successfully..");

将现有项目标记为“flashdata”:

$this->session->mark_as_flash('msg');

显示信息的条件

if(isset($this->session->userdata('msg')) echo $this->session->userdata('msg') ;

或者您可以使用Tempdata

CodeIgniter还支持“tempdata”或具有特定到期时间的会话数据。值过期后,或会话过期或被删除后,该值将自动删除。

与flashdata类似,tempdata变量是常规会话变量,在“__ci_vars”键下以特定方式标记(再次,不要触摸那个)。

要将现有项目标记为“tempdata”,只需将其密钥和到期时间(以秒为单位)传递给mark_as_temp()方法:

// 'item' will be erased after 300 seconds
$this->session->mark_as_temp('msg', 300);