PHP:会话的拇指规则
我不得不把我过于复杂的项目(大约100个文件)分解成小文件。一个问题是,仍然很难看到逻辑,得到大量的会话错误:PHP:会话的拇指规则,php,session,Php,Session,我不得不把我过于复杂的项目(大约100个文件)分解成小文件。一个问题是,仍然很难看到逻辑,得到大量的会话错误: `Cannot send session cookie - headers already sent by` 如何管理会话命令,例如“会话开始”和“ob结束刷新”?您是将它们添加到index.php的开头和结尾,还是有一些集中的文件来管理它们 请对每个答案使用一条拇指规则。也许您可以使用会话自动启动来确保会话在任何输出之前启动 所有这些错误通常意味着您已经输出了一些内容。我解决这个问
`Cannot send session cookie - headers already sent by`
如何管理会话命令,例如“会话开始”和“ob结束刷新”?您是将它们添加到index.php的开头和结尾,还是有一些集中的文件来管理它们
请对每个答案使用一条拇指规则。也许您可以使用会话自动启动来确保会话在任何输出之前启动
所有这些错误通常意味着您已经输出了一些内容。我解决这个问题的方法是使用一些模板引擎来帮助我记住,在我完成所有其他操作之后,只在一个地方发送输出。我用过,但还有很多其他的。
- 使用某种响应对象来聚合数据/标题。
这允许您确保可以同时发送所有头,并且仅在必要时启动会话等
专业人士
- 简化响应处理
- 使您能够聚合内容,并在引发异常时发送不同的输出,因为客户端尚未收到任何数据
- 您将无法尽早向客户端发送数据块
就个人而言,我更喜欢将会话和ob视为不同的库(由我自己用php创建,以我的方式处理),并认为这是最好的解决方案。但这取决于您想要实现什么。在执行任何输出(包括但不限于发送头、cookie)的任何和所有代码之前,您需要使用session_start()因此,在页面加载过程中执行的第一个文件的顶部是一个安全的地方。您可以使用一个实现为的文件,它在最初创建时调用
会话\u start
。然后对该会话对象执行任何进一步的会话操作
输出控制问题可以通过在索引脚本的开头调用
ob\u start
来解决。无需调用ob\u end\u flush
,因为输出缓冲区会在脚本执行结束时自动刷新。这可能不是您想要的,但只是一点提示:
我总是保持
性能不变,打开会话自动启动通常不是一个好主意。而且它不应该是你问题的解决方案,它更像是一个坏黑客。你可能还想看看这个网站,f.e.指出,在启动会话期间,浏览器缓存不工作:如果你有一个几乎所有脚本都启动会话()的网站,那么打开会话自动启动不会对性能造成影响。如果站点的一部分不使用会话,则可以使用“自动预结束”在每个脚本之前包含文件,以确定运行的脚本是否应该启动会话,如果应该,则执行“启动会话()。
<?php
class foo {
//...
}
//EOF