警告:Session_start()+无法修改标题信息


Warning : Session_start() + Cannot modify heading info

在本地,我没有遇到任何问题,但在客户端机器上会出现这些警告。有鉴于此,我把我的会话开始放在我的文件的开头——它看起来像这样:

<!<?php session_start();
if(!isset($_SESSION["loggedin"])) 

注意<!,它被用作模板开始的DW的标志,所以我必须在会话开始之前拥有这个权限。

因此,有没有办法解决这个问题并停止这些警告。或者是更深层次的东西,比如我处理cookie/会话的方式。我把上面的代码放在每个受保护页面的开头。但是,一旦用户登录,我将按如下方式设置$_SESSION。

   session_start();
    $_SESSION['user'] = $user;
    $_SESSION['password'] = $password;
    $_SESSION['loggedin'] = "true";
    header("location:index.php"); //redirect to main page

请告知。

这个<!<?php session_start();是不正确的,因为<!在PHP头之前算作输出。

<!<?php session_start();
if(!isset($_SESSION["loggedin"]))

应读作:(正确

<?php session_start();
if(!isset($_SESSION["loggedin"]))


不正确

(space)<?php session_start();
if(!isset($_SESSION["loggedin"]))

错误:

(space)
(space)<?php session_start();
if(!isset($_SESSION["loggedin"]))

错误:

(HTML)<?php session_start();
if(!isset($_SESSION["loggedin"]))

脚注:出于这个原因,在类文件上去掉关闭php标记是一种很好的形式。它可以防止无意中在包含的文件后面包含空白。


我不知道为什么DW会要求您在php文件的开头放置字符。如果在调用session_start()之前创建了输出(包括空白),那么php将抱怨标头已经发送。换句话说,您不能在session_start调用之前键入php标记之外的任何内容,也不能在session_start调用之前执行echo/print调用。

这也是为什么不使用标记结束php文件是一种好做法的原因?>这样就不会意外地创建空白输出。

如果本地DW以某种方式剥离了这些标签,您可以验证客户端机器上是否没有发生这种情况,因为您会看到