facebook应用程序保留以前的用户详

时间:2011-11-15 13:26:31

标签: facebook session facebook-php-sdk

我遇到了facebook iframe应用程序的问题。我的问题是,如果用户登录到应用程序,然后退出应用程序而另一个(不同的)用户登录,$ facebook-> getUser()将返回上一个用户的ID。

我尝试每次都将用户发送到登录URL,但它仍然会发生,直到页面刷新一次(首次登录到应用前一个用户fb会话,然后就可以了。)

我能找到的唯一领导是由于$ facebook-> getUser()方法中的持久性数据而发生这种情况......

也许有人可以帮助解决这个问题,因为经过很多次我无法找到解决方案...... 谢谢!

1 个答案:

答案 0 :(得分:0)

您正在使用facebook PHP SDK。 在facebook 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获得签名请求

所以如果你最后不想获得以前的用户名,只需删除名为''fbsr_'+YourApplicationID'

的cookie