我使用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闪存数据只会出现在下一个用户请求中?(即重定向/页面重新加载?)。我刚刚设置了闪存数据后加载了一个视图,理论上它应该不起作用,并且不应该出现任何消息,因为这只是第一个请求。
答案 0 :(得分:0)
CodeIgniter支持flashdata
或仅适用于next request
的会话数据,然后自动cleared
。这非常有用,特别是对于一次性信息,错误或状态消息。
有关详情,请参阅Codeigniter Session
答案 1 :(得分:0)
控制器代码
$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);