似乎ob_end_flush()
导致隐式会话关闭。这是预期的行为吗?我想答案是'是',但我可以以某种方式阻止它吗?
这是我遇到的问题的描述。我正在使用使用自定义会话处理程序的框架,在这种情况下我认为不重要,只是为了获取信息。当在框架代码ob_end_flush()
中的某个时刻被调用时,会发生实际问题。通过记录自定义会话处理程序调用,我注意到在这种情况下调用会话写入和关闭。这是隐含的,我甚至无法使用Zend Debugger调试它,只用error_log记录它。因此,在ob_end_flush()
与会话的交互仍然继续之后(我知道,这可能是错误的,但仍然是这种情况)并且在那种情况下,当先前的会话已经关闭时,启动具有新id的新会话。新会话具有新ID,因为此时未设置cookie。因此,结果,我得到了两个不同的ID的两个单独的会话。
对我来说,最好的解决方案可能是禁用隐式ob_end_flush()
行为,但我会接受任何答案。
提前致谢。
答案 0 :(得分:0)
虽然是一个稍微间接的答案,但通常的做法(有时建议练习)是为了缓冲整个请求而启动输出缓冲区。这样做可以让您在开始“输出”内容后很长时间内继续使用会话和/或设置标题(包括重定向)。这应该照顾你的隐式会话关闭问题。只需在引导程序的顶部添加ob_start()
调用即可。