PHP:ob_end_flush()结束会话

时间:2011-12-22 00:55:57

标签: php session

似乎ob_end_flush()导致隐式会话关闭。这是预期的行为吗?我想答案是'是',但我可以以某种方式阻止它吗?

这是我遇到的问题的描述。我正在使用使用自定义会话处理程序的框架,在这种情况下我认为不重要,只是为了获取信息。当在框架代码ob_end_flush()中的某个时刻被调用时,会发生实际问题。通过记录自定义会话处理程序调用,我注意到在这种情况下调用会话写入和关闭。这是隐含的,我甚至无法使用Zend Debugger调试它,只用error_log记录它。因此,在ob_end_flush()与会话的交互仍然继续之后(我知道,这可能是错误的,但仍然是这种情况)并且在那种情况下,当先前的会话已经关闭时,启动具有新id的新会话。新会话具有新ID,因为此时未设置cookie。因此,结果,我得到了两个不同的ID的两个单独的会话。

对我来说,最好的解决方案可能是禁用隐式ob_end_flush()行为,但我会接受任何答案。

提前致谢。

1 个答案:

答案 0 :(得分:0)

虽然是一个稍微间接的答案,但通常的做法(有时建议练习)是为了缓冲整个请求而启动输出缓冲区。这样做可以让您在开始“输出”内容后很长时间内继续使用会话和/或设置标题(包括重定向)。这应该照顾你的隐式会话关闭问题。只需在引导程序的顶部添加ob_start()调用即可。