Приложение Facebook сохраняет предыдущие данные пользователя - PullRequest
4 голосов
/ 15 ноября 2011

У меня проблема с приложением Facebook Iframe. Моя проблема в том, что если пользователь входит в приложение, затем выходит из приложения, а другой (другой) пользователь входит в систему, $ facebook-> getUser () возвращает идентификатор предыдущего пользователя.

Я пытался отправить пользователя на URL входа в систему каждый раз, но это все равно происходит до тех пор, пока страница не обновится один раз (сначала вход в приложение занимает предыдущий сеанс пользователя fb, а затем все в порядке).

Единственное, что мне удалось найти, это то, что это происходит из-за постоянных данных в методе $ facebook-> getUser () ...

Может быть, кто-то может помочь пролить свет на этот вопрос, так как после многих раз я не мог найти решение ... Спасибо!

1 Ответ

0 голосов
/ 20 сентября 2012

Вы используете Facebook PHP SDK правильно. В фейсбуке php sdk при звонке

$ facebook-> getUser () метод сначала проверяет, является ли он закрытой переменной, если пользователь уже установил или нет здесь метод

   * Get the UID of the connected user, or 0
   * if the Facebook user is not connected.
   *
   * @return string the UID if available.
   */
  public function getUser() {
    if ($this->user !== null) {
      // we've already determined this and cached the value.
      return $this->user;
    }
    return $this->user = $this->getUserFromAvailableData();
  }

так что если вы звоните в первый раз, конечно user переменная null

так что теперь он вызывает getUserFromAvailableData (); Метод

   /** * Retrieve the signed request, either from a request parameter or,
   * if not present, from a cookie.
   *
   * @return string the signed request, if available, or null otherwise.
   */
  public function getSignedRequest() {
    if (!$this->signedRequest) {
      if (isset($_REQUEST['signed_request'])) {
        $this->signedRequest = $this->parseSignedRequest(
          $_REQUEST['signed_request']);
      } else if (isset($_COOKIE[$this->getSignedRequestCookieName()])) {
        $this->signedRequest = $this->parseSignedRequest(
          $_COOKIE[$this->getSignedRequestCookieName()]);
      }
    }
    return $this->signedRequest;
  }

и getSignedRequestCookieName() возврат

protected function getSignedRequestCookieName() {
    return 'fbsr_'.$this->getAppId();
   }

так что теперь getSignedRequest() функция сначала проверяет, установлен подписанный запрос или нет, если не установлен получает подписанный запрос от Cookie

поэтому, если, наконец, если вы не хотите получать предыдущий ID пользователя, просто удалите cookie с именем ''fbsr_'+YourApplicationID'

...