如何在session_write_close()之后添加flashdata

时间:2019-04-16 12:25:14

标签: codeigniter session concurrency codeigniter-3

我将我的应用程序从CI2升级到了CI3(CI v3.1.9和PHP7)。现在,会话中新的并发系统出现性能问题(请参见doc)。

应用程序中的某些操作非常长(例如,由于调用外部API可能需要几分钟才能响应),因此我不希望这些操作锁定会话。按照建议,在执行非常长的操作之前,我将在控制器中使用session_write_close()函数。

问题是在此操作结束后,我想在重定向后向用户显示一条消息。目前,我在重定向之前使用的是session->set_flashdata(),但是由于我早先关闭了会话,因此无法正常工作。

有人对如何实现这一目标有建议吗?

如果我再次使用session_start()开始会话,则它可以正常工作,但是我不知道这是与Codeigniter一起使用PHP会话的最佳实践。

1 个答案:

答案 0 :(得分:0)

使用session_start()重新开始会话没有问题。 CodeIgniter的“会话”类仍在加载,并且实例仍然有效。因此,CI可以使会话正常工作的所有“特殊”内容都可以使用。

我测试了一段时间,然后在项目中使用了该方案,但没有遇到任何问题。仍没有从仍在运行的站点的客户那里得到任何回响。 YMMV。

顺便说一句,在__construct()类的CI_Session函数中,对session_start()的调用是为了启动PHP的会话扩展。因此,拨打电话显然不是一个“坏”习惯。 :)