PHP 警告:session_start():标头已发送时无法启动会话

问题描述 投票:0回答:10

我在我的 wp-debug 日志中收到一条错误消息:“PHP 警告:session_start():当标头已发送至第 228 行的...hooks.php 时无法启动会话”。这是文件中的代码片段

function _action_fw_flash_message_backend_prepare() {
            if ( ! session_id() ) {
                session_start();    
            }
        }

session_start();在228上。我读到session_start应该是文件中要执行的第一行代码。这不会影响代码的功能吗? (我的 PHP 经验为零)

php wordpress
10个回答
6
投票

session_start()
移动到页面顶部。和
ob_flush();
在脚本的页脚或末尾。

<?php
@ob_start();
session_start();
?>

3
投票

对我来说,实际问题是 PHP 文件开头的 PHP 标记前的空格。以下代码应该是 PHP 文件的第一行。

<?php session_start(); ?>

当您在上面的代码之前编写一些 Html 代码甚至空格时会出现问题,PHP 将您的 HTML 代码发送到浏览器,这就是为什么它给出 Header already send to browser 的错误。


2
投票

升级到 PHP 7.4 后,我开始收到相同的错误消息,即使我的所有标签和脚本都在正确的位置,对我来说,问题在于文档编码,它是 UTF-8,所以我改变了它转换为没有 BOMUTF-8 就可以了。现在一切都很好。


2
投票

转到public_html->.htacess

打开文件

贴这个

php_flag output_buffering on;

0
投票

我一直在为我的所有项目使用WP Session Manager。消除了创建会话的所有麻烦,您可以在代码中的任何位置使用

$_SESSION
调用。就像其他评论所说的那样,为了开始会话,您需要在设置标题之前运行
session_start()
函数,因此请使用挂钩
plugins_loaded
来运行您的函数。

function _action_fw_flash_message_backend_prepare() {
    if ( ! session_id() ) {
        session_start();    
    }
}

add_action( 'plugins_loaded', '_action_fw_flash_message_backend_prepare' );

0
投票

分开。像这样打开和关闭您的 php 标头脚本:

<?php

session_start();

  if($_SESSION['Active'] == false){ /* Redirects user to login.php if not logged in */
    header("location:../index.html");
    exit;

        }
?>


0
投票

有同样的问题,我找到了适合我的解决方案,它很简单:

php 文件应以

<?php
开头,在此之前没有其他内容。 就我而言,我在
<?php
之前有一个空格;删除它后错误消失了。


0
投票

开始

我在我的 php 代码中间遇到了 session() 的问题,因为我只是先在那里开始会话。
在第一行,我只有一个“”作为注释。

这就是问题所在,“

解决:
将音符行移到底部后,“

我将 php 版本从 php 版本 8.1 更改为 php 版本 8.0 并且它有效。


0
投票

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.