【问题标题】:CodeIgniter: Able to get flash data without redirectCodeIgniter:无需重定向即可获取闪存数据
【发布时间】:2017-07-19 00:51:40
【问题描述】:

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

$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 闪存数据不是只会出现在下一个用户请求中吗?(即重定向/页面重新加载?)。我只是在设置flash数据后加载了一个视图,理论上它应该不起作用,并且不会出现任何消​​息,因为这只是第一个请求。

【问题讨论】:

  • Flashdata 仅在重定向的情况下才有用。
  • Tx,但我的问题是我能够在没有重定向的情况下获得闪存数据,尽管它很有用,这在 CI 中是允许的吗?

标签: php codeigniter session flash-message


【解决方案1】:

如果你想在没有重定向页面的情况下显示会话数据,那么你应该在 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 还支持“临时数据”,即具有特定过期时间的会话数据。值过期,或会话过期或被删除后,会自动移除该值。

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

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

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

【讨论】:

    【解决方案2】:

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

    更多信息请见Codeigniter Session

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-03
      • 1970-01-01
      • 2018-07-17
      • 2014-06-27
      • 1970-01-01
      • 2014-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多