登录后指向受保护的页面时出错


error when directing to protected page after login

所以我创建了一个具有登录功能的网站。您只有在注册并登录后才能访问该网站。注册有效,当按下登录按钮时会话就会启动,但当重定向到受保护的页面时,我会收到错误。我得到以下错误:

警告:无法修改标头信息-标头已由第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文档解决了这个问题。