在用户注销时从我的应用程序中删除facebook会话cookie

brp*_*paz 5 php cookies facebook logout

我正在使用Facebook连接使用他们的Facebook帐户登录用户的应用程序.

一切正常,但以下情况除外:

  1. 用户从我的网站和Facebook退出.
  2. 用户尝试在我的应用中再次登录.

在这种情况下,当facebook连接弹出窗口打开时显示"应用程序中的错误".

我发现原因是用户注销时没有删除旧的fbs cookie.我已添加代码以在我的应用程序注销时删除cookie,但cookie不会被删除.

这是我的代码(使用Symfony框架.)

$fbCookie = 'fbs_'.sfConfig::get('app_facebook_application_id');
          $cookie = $request->getCookie($fbCookie);
          if(!is_null($cookie)){
            setCookie($fbCookie," ", time()-3600);
          }       
Run Code Online (Sandbox Code Playgroud)

这不起作用.cookie保持不变.setCookie函数按预期返回"1".

可能是什么问题?

tgr*_*ser 9

我很确定我也遇到了麻烦......你需要确保在删除cookie后立即杀死Facebook会话,否则它会弹回来...这是一个例子

  // Assuming that $facebook is your facebook object populated with your settings
  $facebook = new Facebook(array(
          'appId'  => FB_APPID,
          'secret' => FB_APPSECRET,
          'cookie' => true));

  $fb_key = 'fbs_'.sfConfig::get('app_facebook_application_id');
  set_cookie($fb_key, '', '', '', '/', '');
  $facebook->setSession(NULL);
Run Code Online (Sandbox Code Playgroud)


Sab*_*ett 5

在当前版本的Facebook SDK中,您需要使用

$fb_key = 'fbsr_'.$facebookConfig['app_id'];
setcookie($fb_key, '', time()-3600);
$facebook->destroySession();
Run Code Online (Sandbox Code Playgroud)

我尝试手动清除cookie和会话,但由于某些原因它仍然无法工作(参见Facebook PHP:用户退出Facebook后,他们无法使用其他用户登录我的应用程序).使用上述解决方案最终是有效的.


Pat*_*ick 0

正如您所说;)这是关于您本地脚本设置的 cookie,而不是 Facebook.com 上的 cookie,所以您的问题是合法的。

我在这里遇到了同样的问题。PHPSDK 不允许您删除 cookie。所以要么你必须在没有cookie的情况下运行整个会话:

$facebook = new Facebook(array(
    'appId'  => FB_APPID,
    'secret' => FB_APPSECRET,
    'cookie' => false,
));
Run Code Online (Sandbox Code Playgroud)

或者您将用户重定向到 facebook 的注销 URL:

header('Location: ' . $facebook->getLogoutUrl(array('next'=>URL_AFTER_LOGOUT))');
Run Code Online (Sandbox Code Playgroud)

唯一的问题似乎是用户也从 Facebook 注销了。

如果你可以使用 Javascript 试试这个:

<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
 FB.init({appId: '<?php echo FB_APPID;?>', status: true, cookie: true, xfbml: true});
 FB.Event.subscribe('auth.logout', function(response) {
    window.location.href='YOUR_LOCAL_LOGOUTSCRIPT';
 });
</script>
Run Code Online (Sandbox Code Playgroud)