所以我创建了一个具有登录功能的网站。您只有在注册并登录后才能访问该网站。注册有效,当按下登录按钮时会话就会启动,但当重定向到受保护的页面时,我会收到错误。我得到以下错误:
警告:无法修改标头信息-标头已由第40行中的/webdata/domains/cim-gmbh.ch/vhosts/www/htdocs/login.php发送(输出起始于/webdata-domains/cim-gmbh.ch/vhosts/www/htdocs/login.php)
警告:无法修改标头信息-标头已由第44行上的/webdata/domains/cim-gmbh.ch/vhosts/www/htdocs/login.php发送(输出起始于/webdata-domains/cim-gmbh.ch/vhosts/www/htdocs/login.php)
这是整个login.php文件:
<?php
include "mysql_connectinfo.php";
if (isset($_SESSION['angemeldet']) || $_SESSION['angemeldet']) {
header('Location: index.php');
exit;
}
else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = $_POST['username'];
$passwort = $_POST['passwort'];
$sql = mysql_query("SELECT $mysqlname FROM $mysqltable WHERE $mysqlname='$username'AND $mysqlpwd='$passwort'");
$num = mysql_num_rows($sql);
if ($num != 0) {
$_SESSION['angemeldet'] = true;
if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') {
if (php_sapi_name() == 'cgi') {
header('Status: 303 See Other');
}
else {
header('HTTP/1.1 303 See Other'); //this is line 40
}
}
header('Location: index.php'); //this is line 44
exit;
}
else {
echo mysql_error();
}
}
?>
确保在第一次打开标签<?php
之前没有空格/缩进:
<?php
include "mysql_connectinfo.php";
还要确保您不会在mysql_connectinfo.php
文件中回显/输出任何内容。
由于您使用的是$_SESSION
,您还需要确保在脚本的开头有session_start()
:
<?php
session_start();
// more code
确保代码编辑器在文档中不包含BOM。我知道一个事实,记事本++和其他一些默认情况下包括这一点。如果包含它,它将在文档中插入不可见的字符,这看起来像是服务器的输出,从而导致您看到的错误消息。尝试将代码复制并粘贴到没有BOM表的新文档中。
几周前,我遇到了同样的问题,在Dreamweaver中创建一个没有BOM(字节顺序标记)的新php文档解决了这个问题。