php - session_start():无法发送会话缓存限制器 - 标头已发送(qual vs prod)
问题描述
我完全被这件事难住了,正在寻找一双新的眼睛。
我有两台服务器在各方面都是相同的,除了我们的 qual 服务器在 http 上,我们的 prod 服务器在 https 上 - 否则它们在各个方面都是彼此的克隆(xampp、mysql、php 版本等......)
在质量上,用户加载(为了简单起见)a.php
,它具有以下相关行:
<?php
session_start();
include('b.php');
?>
然后 b.php 开始:
<?php
session_start();
include('c.php');
?>
和 c.php 开始:
<?php
session_start();
?>
在开发中,这一直工作得很好——但是在将我们所有的代码向上推送并将完全相同的代码拉到生产服务器(全新的测试文件夹)之后,我们现在在 prod 中得到了这些错误:
Warning: session_start(): cannot send session cache limiter - headers already sent by... (b.php and c.php)
和
Warning: session_start(): Cannot send session cookie - headers already sent by (b.php and c.php)
我明白文字在说什么——但让我恼火的是我找不到一种方法可以让这段代码在两台完全相同的服务器上同时工作!
在QUAL上:如果我session_start()
从 b.php 和 c.php(应用程序)中删除调用,则这些页面中对 $_SESSION 变量的调用无法返回有效数据——但如果我在每个文件中都包含该语句,那么一切都很好。
在PROD上:如果我删除对 的调用session_start()
,一切正常,并且 b.php 和 c.php 中的 $_SESSION 变量加载得很好,但如果我包含 session_start(); 我得到上面的错误。
在我的一生中,我无法弄清楚是什么原因造成的,我也无法从生产中删除 https 来测试它(因为它确实是两台服务器之间的唯一区别)。
我很肯定代码也完全相同 - 相同的 git commit,一切。
关于可能导致这种差异的任何想法?我真的很难过!
解决方案
推荐阅读
- sqlite - React Native SQLite 全文搜索
- linux - 添加选项 -lc -lstdc++ OR -specs=nosys.specs 允许 arm-none-eabi-gcc v4.9 进行编译
- c++ - 我可以使用 auto 或 decltype 代替尾随返回类型吗?
- java - org.springframework.jdbc.support.MetaDataAccessException:提取DatabaseMetaData时出错
- akka - akka-quartz-scheduler:找不到匹配的石英配置
- c++ - 我们可以在 C++ 中使用向量来获取未知大小的用户输入,直到我们按下回车键?
- delphi - WinInet InternetCloseHandle 不关闭连接
- python - 实现pop3客户端
- java - 在 java 中生成报告 pdf - swing、table
- python-3.x - Pysimplegui 比迪支持