在本地,我没有遇到任何问题,但在客户端机器上会出现这些警告。有鉴于此,我把我的会话开始放在我的文件的开头——它看起来像这样:
<!<?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以某种方式剥离了这些标签,您可以验证客户端机器上是否没有发生这种情况,因为您会看到