警告:无法修改头信息 - 头部已发送(PHP)

16 浏览
0 Comments

警告:无法修改头信息 - 头部已发送(PHP)

我的问题与以下帖子有些相似:

PHP错误:无法修改头信息 - 头部已发送

但在我的情况下,我选择在确定登录表单没有验证错误,并且用户的登录信息与数据库匹配后才开始会话。以下是相关代码:

登录页面(在任何html之前)

session_name('username');
session_name('ip');
session_name('start');
session_start();    

Login.php片段(在html的body中)

         } else {
            $user = $_POST['username']; 
            $userpass = md5($_POST['password']); 
            $login_results = statement("select username, password from `$admin` where username='$user' and password='$userpass'");
            if (mysql_num_rows($login_results)!= 1) { 
                $errmsg = "登录失败:用户名或密码不存在";
            }else {
                $_SESSION['username'] = "$user"; 
                $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
                header("Location: index.php"); 
            }
        }
    }
}

如果您查看上面代码的else块,我正在验证登录,如果验证成功,我想分配会话变量并转到我的主页。主页的开头有以下代码:

//Session Timeout Script -- 用于确定用户闲置的时间。如果用户闲置时间超过会话时间,则注销用户。
//在超时脚本之后,还会检查用户名和IP地址的有效性,如果其中任何一个失败,则将用户重定向到登录页面。
session_cache_expire( 20 );
session_start(); 
$inactive = 1200;     
if(isset($_SESSION['start']) ) {
    $session_life = time() - $_SESSION['start'];
    if($session_life > $inactive){
        header("Location: logout.php");
    }
}
$_SESSION['start'] = time();
$newip = $_SERVER['REMOTE_ADDR']; 
if (!isset($_SESSION['username']) ||  empty($_SESSION['username']) || $newip!=    $_SESSION['ip']) { 
    header('Location: login.php'); 
} 

现在阅读前面作者的问题,提到header()应该是发送重定向的代码中的第一件事情,而在我的情况下是login.php。这样做可以让我登录,但是当我注销时,我会销毁所有的会话,并使用header()将我发送回登录页面。这将导致登录页面重新定向回主页,因为它是第一行代码被读取到的。有没有办法避免这种情况?这样我就不需要重复我已经在login.php的顶部放置的一些代码逻辑了吗?

Andre

0
0 Comments

“Warning: Cannot modify header information - headers already sent (PHP)”这个问题是由于在PHP代码中出现了输出内容导致的。解决方法是确保在PHP代码之前没有任何输出内容,并且确保header()函数只被调用一次。

这个问题可能出现在PHP文件的开头和结尾处有空格的情况下,像下面的例子所示:

   

如你所见,在PHP标签的开始之前有一个空格。当PHP代码和HTML混合在一起时,这会引发一些可笑的错误。

另外,我记得调用session_start()函数必须是打开PHP标签之后的第一行代码。

还有一件事情。据我所记得,不能多次调用header()函数。级联调用是不可能的。

重新阅读一遍错误信息后,它声称输出已经发送到在header()函数执行之前的一个包含文件中。我进入那个文件,去掉了空格,现在它运行正常了,非常感谢M2X。

当然!;-] 不要忘记将问题标记为已回答,以便其他可能遇到相同问题的人可以找到答案。

0
0 Comments

这个问题的出现原因是因为在调用header函数之前已经有输出了。在调用header函数之前不能有任何输出,因为header函数是http本身所需要的,没有其他方法可以绕过这个限制。然而,你可以在调用session_start()之后再调用header函数。

所以你可以先启动会话,从$_POST检查登录数据,然后开始输出html。

顺便问一下,为什么连续使用三个session_name

好的,我将我的if else代码块(else代码块在帖子中显示)移动到任何html输出之前,并删除了session_name,代码从<? session_start()开始。但错误仍然存在...我按照你推荐的方法进行操作。现在header()函数可以保持在else代码块中吗?因为此时还没有输出,它仅仅是在检查post后的登录数据。

忽略这个帖子Cek,罪魁祸首是多余的空格。

解决这个问题的方法是在调用header函数之前确保没有任何输出。可以将header函数放在代码的最开始处或者在调用session_start()之后再调用header函数。另外,还要注意避免在代码中使用多余的空格。

0
0 Comments

(Warning: Cannot modify header information - headers already sent (PHP)) 这个问题通常是由于在PHP文件中输出内容之后再尝试修改HTTP头部信息导致的。下面我们来看一下这个问题出现的原因以及解决方法。

出现这个问题的原因是在PHP文件中输出内容之后再尝试修改HTTP头部信息。在PHP文件中,如果在输出内容之后再尝试修改HTTP头部信息,就会导致这个错误的产生。这是因为HTTP头部信息必须在输出内容之前被修改,否则就会出现冲突。

解决这个问题的方法有以下几种:

1. 确保在输出内容之前修改HTTP头部信息。在PHP文件中,如果需要修改HTTP头部信息,一定要确保在输出内容之前进行修改。这可以通过将修改头部信息的代码放在PHP文件的顶部来实现。


2. 使用输出缓冲。输出缓冲可以将所有输出的内容先保存在缓冲区中,等到需要输出时再一次性输出。这样就可以在输出内容之前修改HTTP头部信息,避免出现错误。


3. 检查PHP文件是否存在额外的空格或换行符。有时候,PHP文件中可能存在不可见的空格或换行符,它们会在输出内容之前被发送到浏览器,导致无法修改HTTP头部信息。可以通过在PHP文件的开头使用ob_clean()函数来清空输出缓冲区,并确保文件中没有额外的空格或换行符。


通过以上几种方法,我们可以避免(Warning: Cannot modify header information - headers already sent (PHP))这个问题的出现,并正确地修改HTTP头部信息。

0