会话开始但给出缓存限制器错误

时间:2016-02-16 06:45:27

标签: php html

您好我从过去几天收到此错误我已经在Google搜索中搜索并找到了以下解决方案,但这对我来说也不起作用

Warning
: session_start(): Cannot send session cache limiter - headers already     sent (output started at /home/user/public_html/pages/about-us.php:65) in
/home/user/public_html/pages/inc/header.php


<?php
session_set_cookie_params(0, '/', '.mysite.com');
session_start();
?>

2 个答案:

答案 0 :(得分:1)

解决方案1:在将任何内容打印到输出

之前调用session_start()

session_start()应该是您网页上的第一个代码。只有在服务器将第一个字节发送到浏览器之前,才能启动会话,因为会话信息在标头中发送,并且在发送第一个字节后不允许修改标头。因此,一旦第一个字节离开服务器,就不会再回头了。因此,确保之前没有任何东西,甚至没有空白区域:

<?php
    session_start();
    ...
?>

例如,以下内容无效

Hello world.

<?php
    session_start();
    /* Warning occures here because "Hello world." text
     * was already sent to the browser.*/
?>

以下代码存在同样的问题:

<?php
    echo "Hello world."
    session_start();
    /* Warning occures here because "Hello world." text
     * was already sent to the browser.*/
?>

但是,以下是可以的:

<?php
    session_start();
    echo "Hello world."
?>

此外,您可以在会话开始之前执行任何操作,这不会导致打印到输出。例如,您可以毫无困难地执行以下操作:

<?php
    $i = 5;
    session_start();
?>

解决方案2:使用输出缓冲

如果您不想在请求开始时启动会话,但是您希望稍后执行此操作,则必须使用输出缓冲区。输出缓冲区确保几乎立即发送到浏览器的内容将在服务器端进行缓冲,然后在整个页面准备好或以块为基础时完全发送到浏览器 - 基于您实际使用它的方式。缩小尺寸是用户将不得不等待页面更长一点。您可以通过调用:

来启动输出缓冲区
<?php
    ob_start();
?>

但请确保在打印任何内容之前调用此代码 - 即将其作为第一个命令。稍后,一旦完成了session_start或HTTP标头的任何其他修改,或者一旦您的页面完全生成,只需调用

<?php
    ob_end_flush();
?>

完成输出缓冲并打印出缓冲区中的内容。

答案 1 :(得分:-1)

试试这个:

let config = ParseClientConfiguration(block:{ (ParseMutableClientConfiguration) -> Void in
    ParseMutableClientConfiguration.applicationId = "APPID"
    ParseMutableClientConfiguration.clientKey = "myClientKey"
  ParseMutableClientConfiguration.server = "my AWS or Heroku server"
  })
Parse.initializeWithConfiguration(config)

希望能解决您的问题。