页面开头的DOCTYPE会导致session_problem

时间:2013-07-02 15:39:58

标签: php html session

我的网站出现此错误:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - 
headers already sent (output started at /home/rentedco/public_html/try6.php:2) in 
/home/rentedco/public_html/try6.php on line 2

我创建了一个简单的php文件,其中只包含其他页面的开头:

<!DOCTYPE html>
<?php session_start();
echo 'fsdf';
?>

并且我发现如果我删除DOCTYPE我再也不会遇到这个问题,我的问题是我不想通过删除此标题来破坏别的东西。 我可以删除吗?我可以在session_start之后调用它吗?

4 个答案:

答案 0 :(得分:2)

是的,将doctype放在那里将数据推送到PHP输出缓冲区,但session_start()需要将cookie数据写入标头。 doctype是HTML页面的一部分,而不是标题,因此在session_start()之后放入它应该是安全的。

答案 1 :(得分:0)

session_start()应始终在开头写入,否则与 header()功能无关。

答案 2 :(得分:0)

必须先调用会话启动,然后才能将任何输出发送到浏览器,将代码更改为

<?php session_start(); ?><!DOCTYPE html>
<?php 
    echo "fsdf";

答案 3 :(得分:0)

试试这个想法。您可以根据需要多次启动和停止php解释器,但session_start()必须在您开始向浏览器发送任何html之前发生。

<?php 
    session_start();
?>
<!DOCTYPE html>
<html>
<head>
....
....
</head>
<body>
<?php
    echo 'fsdf';
?>
</body>
</html>