【问题标题】:DOCTYPE in the head of the page causes session_problem页面头部的 DOCTYPE 导致 session_problem
【发布时间】:2013-06-30 01:43:32
【问题描述】:

我的网站出现了这个错误:

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 调用之后 pt 它吗?

【问题讨论】:

    标签: php html session


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      必须在任何输出发送到浏览器之前调用会话开始,将您的代码更改为

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

      【讨论】:

        【解决方案3】:

        session_start() 应始终写在开头,否则将无法与 header() 函数一样工作。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

          • 感谢您的回答。无论如何我必须写 DOCTYPE 吗?这个标签有什么作用?
          • Doctype 定义了浏览器应该如何解析 HTML。当您只有 时,您已将页面定义为 HTML5。这里有更多信息:w3.org/wiki/Doctypes_and_markup_styles
          猜你喜欢
          • 2012-02-26
          • 2010-12-25
          • 1970-01-01
          • 2017-11-24
          • 1970-01-01
          • 2013-03-24
          • 1970-01-01
          • 2020-11-15
          • 1970-01-01
          相关资源
          最近更新 更多