我遇到了facebook iframe应用程序的问题。我的问题是,如果用户登录到应用程序,然后退出应用程序而另一个(不同的)用户登录,$ facebook-> getUser()将返回上一个用户的ID。
我尝试每次都将用户发送到登录URL,但它仍然会发生,直到页面刷新一次(首次登录到应用前一个用户fb会话,然后就可以了。)
我能找到的唯一领导是由于$ facebook-> getUser()方法中的持久性数据而发生这种情况......
也许有人可以帮助解决这个问题,因为经过很多次我无法找到解决方案...... 谢谢!
答案 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'