Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
即使用户已从Facebook注销,FB.getLoginStatus也会返回会话_Facebook_Facebook Javascript Sdk - Fatal编程技术网

即使用户已从Facebook注销,FB.getLoginStatus也会返回会话

即使用户已从Facebook注销,FB.getLoginStatus也会返回会话,facebook,facebook-javascript-sdk,Facebook,Facebook Javascript Sdk,这让我快发疯了。一个用户登录到我的Facebook应用程序,做一些事情。然后转到Facebook并注销。我有一个小计时器,每隔一段时间调用FB.getLoginStatus(),查看用户是否仍在登录。但无论何时调用FB.getLoginStatus(),它都会返回一个带有会话对象的响应。世界跆拳道联盟?它不应该返回未定义/未知吗 我使用的是对Facebook evar最基本的呼叫: FB.init({ appId: 'MY APP ID', cookies: false,

这让我快发疯了。一个用户登录到我的Facebook应用程序,做一些事情。然后转到Facebook并注销。我有一个小计时器,每隔一段时间调用FB.getLoginStatus(),查看用户是否仍在登录。但无论何时调用FB.getLoginStatus(),它都会返回一个带有会话对象的响应。世界跆拳道联盟?它不应该返回未定义/未知吗

我使用的是对Facebook evar最基本的呼叫:

FB.init({
    appId: 'MY APP ID',
    cookies: false,
    status: true,
    xfbml: false
});

FB.getLoginStatus(function (response) {
    if (response.session) {
        console.info("Session exists");
    } else {
        console.info("Session empty");
    }
});

setInterval(function () {
    FB.getLoginStatus(function (response) {
        if (response.session) {
            console.info("Session exists");
        } else {
            console.info("Session empty");
        }
    });
}, 10000);

我检查并再次检查了使用allow请求的权限。我只是要求电子邮件和短信。所以有什么建议吗?

您确定当用户注销时会话总是被破坏吗?也许这只是会话中的一个变量,如果用户登录或注销,该变量会发生变化……。

我在使用您的代码时遇到了同样的问题。 到目前为止,我唯一的解决方法是在每次查询登录状态时初始化sdk:

setInterval(function () {
                FB.init({
                  appId      : 'xxxx', // App ID
                  channelUrl : 'xxxx', // Channel File
                  status     : true, // check login status
                  cookie     : true, // enable cookies to allow the server to access the session
                  oauth      : true, // enable OAuth 2.0
                  xfbml      : true  // parse XFBML
                });
                FB.getLoginStatus(function (response) {
                    if (response.authResponse) {
                        console.info("Session exists");
                    } else {
                        console.info("Session empty");
                    }
                });
            }, 10000);

通过这种方式,我总能获得正确的会话状态。如果有更有效的方法,请告诉我

尝试使用初始化FB

status: false

因此,它将按照您的预期工作。这对我来说很管用

别这么辛苦。这种情况有一个简单的解决方案,只需添加一个“true”语句作为getLoginStatus方法的第二个参数:

FB.getLoginStatus(function (response) {
   if (response === undefined || response.status === 'connected') {
      // Do something after logout
   }
}, true);

请注意,每次调用此功能都会使你的应用程序进入Facebook的服务器,并会根据你的实现给你带来相当大的网络负载。希望这有帮助

我不知道用户何时注销,所以我不知道何时销毁会话。如果FB.getLoginStatus返回正确的状态,那么我就可以销毁我这边的所有东西。这正是我要找的!