首页 > 解决方案 > 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,一切。

关于可能导致这种差异的任何想法?我真的很难过!

标签: php

解决方案


推荐阅读