【问题标题】:Warning: session_start() in php session [duplicate]警告:php 会话中的 session_start() [重复]
【发布时间】:2013-12-29 23:13:57
【问题描述】:

我的应用程序中出现以下错误,要求用户使用 facebook 帐户登录: 警告:session_start() [function.session-start]:无法发送会话 cookie - 标头已由第 37 行 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/lib/facebook.php 中的 XXXXXXXXXXXXXXXXXXXXXXXXXXX/fblogin1.php:4 发送(输出开始于 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/lib/facebook.php)

警告:session_start() [function.session-start]:无法在第 37 行的 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX/lib/facebook.php 中发送会话缓存限制器 - 标头已发送(输出开始于 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/fblogin1.php:4)

我不知道为什么会显示这个错误,尽管当我在 phpcloud.com 上托管我的应用程序时它没有出现

这是fblogin1.php的代码

    <?php
    $id=$_GET['id'];
    include('lib/db.php');
    require 'lib/facebook.php';
    require 'lib/fbconfig.php';

    // Connection...
    $user = $facebook->getUser();
    if ($user)
     {
     $logoutUrl = $facebook->getLogoutUrl();
     try {
     $userdata = $facebook->api('/me');
     } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
     }
    $_SESSION['facebook']=$_SESSION;
    $_SESSION['userdata'] = $userdata;
    $_SESSION['logout'] =  $logoutUrl;
    header("Location: home.php?id=$id");
    }
    else
    { 
    $loginUrl = $facebook->getLoginUrl(array( 'scope' => 'user_about_me,user_activities,user_birthday,user_checkins,user_education_history,user_events,user_groups,user_hometown,user_interests,user_likes,user_location,user_notes,user_online_presence,user_photo_video_tags,user_photos,user_relationships,user_relationship_details,user_religion_politics,user_status,user_videos,user_website,user_work_history,email,read_friendlists,read_insights,read_mailbox,read_requests,read_stream,xmpp_login,ads_management,create_event,manage_friendlists,manage_notifications,offline_access,publish_checkins,publish_stream,rsvp_event,sms,publish_actions,manage_pages'
    ));
    echo '<div class="style1"><a target="_top" href="'.$loginUrl.'"><img src="facebook.png" title="Login with Facebook" /></a></div>';
     }
     ?>

这是 facebook.php 代码:

    <?php
     ob_start();
     ?>
     <?php
     require_once "base_facebook.php";
     class Facebook extends BaseFacebook
     {
       public function __construct($config) {
         if (!session_id()) {
           session_start();
         }
         parent::__construct($config);
       }

       protected static $kSupportedKeys =
         array('state', 'code', 'access_token', 'user_id');
       protected function setPersistentData($key, $value) {
         if (!in_array($key, self::$kSupportedKeys)) {
           self::errorLog('Unsupported key passed to setPersistentData.');
           return;
         }
         $session_var_name = $this->constructSessionVariableName($key);
         $_SESSION[$session_var_name] = $value;
       }
       protected function getPersistentData($key, $default = false) {
         if (!in_array($key, self::$kSupportedKeys)) {
           self::errorLog('Unsupported key passed to getPersistentData.');
           return $default;
         }
         $session_var_name = $this->constructSessionVariableName($key);
         return isset($_SESSION[$session_var_name]) ?
           $_SESSION[$session_var_name] : $default;
       }

       protected function clearPersistentData($key) {
         if (!in_array($key, self::$kSupportedKeys)) {
           self::errorLog('Unsupported key passed to clearPersistentData.');
           return;
         }
         $session_var_name = $this->constructSessionVariableName($key);
         unset($_SESSION[$session_var_name]);
       }
       protected function clearAllPersistentData() {
         foreach (self::$kSupportedKeys as $key) {
           $this->clearPersistentData($key);
         }
       }
       protected function constructSessionVariableName($key) {
         return implode('_', array('fb',
                          $this->getAppId(),
                          $key));
       }
     }
     ?>

我在这篇文章 (What is output buffering?) 中发现了一个主要线程,它指出输出缓冲是解决此类问题的方法。如果是这样,我应该在哪里添加它?在 show.php 或 facebook.php 以及如何添加它? 注意:我在开头添加了
这最终 但这对我不起作用

【问题讨论】:

  • 你的 session_start() 在哪个文件中?检查之前没有输出,也没有 header() 调用。

标签: php facebook-graph-api session-cookies


【解决方案1】:

确保您的 'lib/facebook.php' 没有将任何输出写入屏幕...没有回显命令等。错误告诉您的是,在 header() 出现之前什么都不能写发送。它还告诉你 Facebook.php 第 37 行正在编写一些内容。

【讨论】:

  • 在 facebook.php 的第 37 行这里是代码 code public function __construct($config) { if (!session_id()) { session_start(); } 父::__construct($config); }code
  • 我刚刚编辑了我的问题,你能看一下吗?
猜你喜欢
  • 2014-10-29
  • 2023-04-05
  • 2013-06-11
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
相关资源
最近更新 更多