首页 > 解决方案 > 如何在 session_write_close() 之后添加 flashdata

问题描述

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

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

问题是我想在此操作结束时重定向后向用户显示一条消息。现在,我session->set_flashdata()在重定向之前使用,但是因为我之前关闭了会话,所以它不起作用。

有没有人对如何实现这一目标提出建议?

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

标签: codeignitersessionconcurrencycodeigniter-3

解决方案


使用 再次启动会话没有问题session_start()。CodeIgniter "Session" 类仍然被加载并且实例仍然有效。因此,CI 为使会话正常工作所做的所有“特殊”工作都很好。

前段时间我在一个项目中测试并使用了这个方案,没有遇到任何问题。也没有从仍在运营的网站的客户那里得到任何反击。YMMV。

顺便说一句,在类的__construct()函数中CI_Session调用以session_start()启动 PHP 的会话扩展。所以打这个电话显然不是一个“坏”的做法。:)


推荐阅读