我收到此警告,不允许我继续:
警告:session_start():当标头已在第 45 行的 C:\xampp\htdocs\bancoinfocial\index.php 中发送时,无法启动会话
注意:未定义变量:第 3 行 C:\xampp\htdocs\bancoinfocial\principal.php 中的 _SESSION
这是我的代码:
索引.php
<div id="principal" hidden>
<?php
session_start();
require_once("principal.php");
?>
</div>
主文件
<div>
<?php
echo $_SESSION['fullname'];
?>
</div>
也就是说,我从index.php调用principal.php,因为已经发送了标头,因此无法登录,即使这是我在每次调用 method 时执行的第一条指令。session_start()
session_start()
是一个根据配置发送各种 HTTP 标头的函数,因此在写入内容后无法执行(因为无法修改标头)。您
<div>
的 HTML 代码位于session_start
PHP 代码之前,这就是导致问题的原因。session_start
在写任何东西之前应该先出现。因此,您应该将其移至所有内容的顶部以避免该错误:问题是因为您
div
在验证会话之前在您的 html 中执行操作。在PHP中,session_start();
必须先于其他任何东西。甚至在他之前div
。尝试以下操作:
索引.php
要使其工作,您必须将会话session_start移动到 index.php 的开头。
索引.php
主文件
同样的事情发生在我身上,尝试这样做:
解决方案 1
如果它对您不起作用,则可能是您从 php 使用的本机函数,它正在创建会话或类似的东西,并且不允许您包含文件,在我的情况下是以下内容。
这个 ("base64_encode()" 不允许我在 php 中包含一个文件,它将开始一个会话。
解决方案 2
该解决方案似乎很复杂,但实际上并不复杂,您只需创建一个容器,您将在其中包含所有内容,然后将其包含在 Javascript 和 ajax 中,如下所示:
要让它在页面的开头加载,你必须这样写:
解决方案 3
是的,最后,如果您将此行包含
session_start();
在您包含的php文件中以及包含它们的位置,即在父级和子级中,解决方案就是将其保留在文件中,并且您必须将其保留在哪里你需要使用这个全局变量$_SESSION
。我遇到了同样的问题,在会议召开之前这是一个简单的空间......非常好另一位同事的观察,因为我不会相信它!
它是这样工作的:
问题可能出在您使用的 PHP 版本中。如果您有 PHP 7.2,请将其降级到 7.1,这是一个更稳定的版本。
它还享有 7.2 的大部分巨大进步,尤其是执行速度。
当我将 cPanel 从 5.4 版更改为 7.2 版时,我遇到了同样的问题,当我将其更改为 7.1 版时,一切恢复正常。
如果没有令人信服的理由使用 7.2 版,请切换到 7.1。
希望这可以帮助。
我有同样的错误!在本地它对我来说非常有效,但是在上传它时,我看到了类似的东西:警告:session_start():当标头已经发送时无法启动会话......但我通过更新我使用的 PHP 版本解决了它 7.3 及以下到 7.1,这就是我能够修复错误的方式。