php中的会话

时间:2010-12-05 15:17:38

标签: php session

您好 我刚刚在php完成了一个网站的开发 我托管该网站并收到以下错误

Warning: session_start () [function.session-start]: Can not send session cookie - headers already sent by (output started "at / home/qualitr1/public_html/DemoEcolace/index.php: 2) in / home/qualitr1/public_html/DemoEcolace / index.php on line 2

知道我在Windows上本地没有这个问题 我的文件的代码如下:

<? Php
session_start ();
?>

4 个答案:

答案 0 :(得分:3)

之所以发生这种情况,是因为会话使用cookie,而cookie是通过http标头传输的,如果您已经将内容发送到网页,则无法发送标题

你的php ini指定短标记处于打开状态,而不是使用<?php代替您使用<?

正如你所做的那样:

<? Php
session_start ();
?>

您的网页可能正在吐出一些错误文本,因为如果<?和php之间的空间无法启动会话启动。

在致电sessions_start()

之前,您应始终确保不发送内容

你应该这样做:

<?php
session_start();
?>

确保php标记之前或之后没有内容。

另外一篇文章也提到了隐藏字符的可能性,称为 BOM ,(字节顺序标记),此字符是不可见的,无法看到但可能存在

如果你使用记事本如记事本++那么你可以选择格式然后UTF-8没有BOM。

如果以上问题无法解决问题,那么您可以创建一个小脚本来扫描您的应用程序 BOM 字符:

找到一些递归工具,然后找到你可以做的每个php文件:

$bom = pack("CCC", 0xef, 0xbb, 0xbf);

然后检查文件的第一个 3 字符,如下所示:

if (0 == strncmp($str, $bom, 3))
{
    //this file has BOM Char
}

答案 1 :(得分:2)

首先,<?php之间不应有空格。另外,检查文件的开头是否有UTF-BoM(字节顺序标记)。它在文本编辑器中是不可见的,但它仍然算作输出,因此导致上述错误。

答案 2 :(得分:2)

开始会话前无输出。也许index.php中有一个输出,第2行。 如果您的文档是以UTF-8编码的,那么您的php文件必须以“UTF-8 BOM”进行编码。

答案 3 :(得分:0)

发送cookie需要修改HTTP标头。只有在尚未发送的情况下才有可能。当输出开始时(显式或隐式),这通常会发生。

因此,为了在会话中使用cookie,您需要确保在调用session_start之前没有输出或者输出尚未发送到客户端(请参阅output control

根据错误消息,输出从 /home/qualitr1/public_html/DemoEcolace/index.php:2 开始。因此,看一下该行中发生的事情并阻止该输出(包括像换行符,空格,制表符以及可能的UTF BOM这样的空格)或使用输出控件来缓冲任何输出,以便您可以修改HTTP标头,即使已经有一些输出。