согласование Facebook PHP SDK с zend framework

поэтому я использую Facebook PHP SDK для аутентификации моего пользователя....

и я пытаюсь выйти из системы, используя метод destroySession() в base_facebook.php

Вот некоторые соответствующие выдержки из PHP SDK base_facebook.php: https://github.com/facebook/php-sdk/blob/master/src/base_facebook.php

      public function destroySession() {
        $this->setAccessToken(null);
        $this->user = 0;
        $this->clearAllPersistentData();
      }

  protected function clearAllPersistentData() {
    foreach (self::$kSupportedKeys as $key) {
      $this->clearPersistentData($key);
    }
  }

  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]);
  }

но каждый раз, когда я пытаюсь это сделать, Zend Framework жаловался

Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'session has already been started by session.auto-start or session_start()' 

Zend_Session_Exception: session has already been started by session.auto-start or session_start() 

Как мне очистить сеанс facebook, не вызывая всех этих ошибок?


person kamikaze_pilot    schedule 28.11.2011    source источник
comment
У вас есть собственный класс, расширяющий BaseFacebook? Или вы расширяете класс Facebook (который, в свою очередь, расширяет BaseFacebook)?   -  person Tim Fountain    schedule 28.11.2011
comment
Если Zend генерирует это исключение, вам следует проверить код и поискать другие возможные варианты session_start(), возможно, во flashMessenger? Кстати, этот код принадлежит классу Facebook, расширяющему FacebookBase. Может быть, вам следует подумать о написании собственного класса, который хранит данные facebook в сеансе, но с использованием механизмов Zend Session?   -  person Norbert Orzechowicz    schedule 04.12.2011


Ответы (2)


Условием использования Zend_Session является то, что сеанс еще не должен быть инициирован. Facebook инициирует это. В качестве решения вызовите session_write_close() перед использованием Zend_Session.

Либо вызовите session_destroy(), чтобы выйти из системы пользователя facebook. Он уничтожает все данные, связанные с текущим сеансом.

person Community    schedule 11.12.2011

Чтобы заставить его работать с Zend_Session, я изменил исходный код facebook.php и заменил

    session_start()

by

    $this->session = new Zend_Session_Namespace();
    $this->session->fb = array();

Затем замените все вхождения

    $_SESSION"

by

    $this->session->fb
person Max    schedule 06.01.2012