php start_session()不适用于localhost

时间:2009-12-25 18:08:54

标签: php session windows-xp xampp permissions

我刚开始制作这个.php文件,我似乎无法弄清楚为什么它会抛出这个警告

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Program Files\xampplite\htdocs\projectchest\controlpanel\index.php:1) in C:\Program Files\xampplite\htdocs\projectchest\controlpanel\index.php on line 2

这是我的PHP。

<?php
    session_start();
    require_once('../classes/users/BaseUser.php');
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   ...
</html>

这里是访问我的php.ini文件

pastebin dot com / f60d22891抱歉,我无法发布一些垃圾邮件的两个链接

我还发现这个帖子暗示我的权限设置搞砸了。我试过这个......没有运气 PHP session_start fails

3 个答案:

答案 0 :(得分:4)

PHP中的会话基于cookie (传输session_id

Cookie以HTTP标头形式发送。

只有在尚未发送输出的情况下才能发送HTTP标头。

您收到的错误消息表示无法发送会话cookie,因为某些输出已经发送。


这意味着在调用session_start()之前,您必须确保不要发送任何输出(甚至不是一个空格!)


一些想法:

  • 确保在打开php标记
  • 之前没有空行
  • 确保您的PHP脚本没有使用BOM 以UTF-8编码(某些编辑器默认将其放在文件的开头)
    • 即。重新保存您的文件(如UTF-8,为什么不呢),没有BOM


作为旁注:您可能会在某些服务器上出现此错误,而不是在其他服务器上,因为output_buffering的配置:如果它在上(它在您的php.ini文件中为Off) ,PHP会在发送之前将一些数据保存在内存中 - 这意味着即使少量数据似乎已经发送也可以发送标题(实际上,少量数据保存在内存中,并且。。

答案 1 :(得分:1)

很可能是字符编码问题(准确地说是UTF 8 BOM)。尝试将您的php源文件转换为没有BOM的UTF-8。你在用哪个编辑器?

答案 2 :(得分:0)

php.ini (see manual)中还有session.auto_start指令,它将在PHP发送HTTP标头后立即交换cookie并设置会话。不是可定制的,但它是最小距离的解决方案。