实时获取Facebook上的用户登录状态

时间:2011-08-12 04:46:51

标签: java javascript facebook spring-mvc

这个问题与我的另一个问题有关:How to know if a user log out of Facebook, FB.Event.Subscribe not work

在那个问题中,我试图在用户退出Facebook时收到回电事件。但由于它还没有适当的答案,我必须尝试另一种方式。我尝试轮询以通过javascript获取用户的登录状态,如下所示:

        function checkLogin()
        {
            alert("in");
            FB.getLoginStatus(function(response) {
              if (response.status == "connected") {
                // logged in and connected user, someone you know
                alert("ok - 5 seconds has passed");
              } else {
                // no user session available, someone you dont know
                alert("not ok");
              }
            });
            t=checkLogin("timedCount()",5000);
        }

问题在于:该函数仅在第一次调用时返回正确的结果。在那之后,似乎结果被缓存了,我不断收到“连接”作为回应,尽管用户默默地在浏览器中的另一个选项卡中注销。

这不好,因为当时Facebook弹出一个要求用户登录的对话框。但是如果用户取消它,他仍然可以使用我的应用程序(导致他与我的应用程序服务器的会话尚未过期!)。

document中,FB dev说:

  

当您调用FB.getLoginStatus时,可能会发出HTTP请求   www.facebook.com检查用户的当前状态。但是,如果   在此浏览器会话期间已经调用了FB.getLoginStatus,   并且会话已经存在于cookie中,HTTP请求   可能不需要facebook.com

所以我觉得这个效果是由缓存引起的。我想知道为什么Facebook这样做。

是否有人知道解决此问题的方法?

感谢您的帮助,

Hoang Long

1 个答案:

答案 0 :(得分:1)

最后,我花了很长时间,直到我的一位同事解决了这个问题。

解决方案是我们需要在调用FB.init()之前使用cookie:false再次致电getLoginStatus。这将删除cookie并获取新信息。

FB.init({ 
        appId:'${appId}', 
            cookie: false, 
        status: true, 
        xfbml: true 
    });

FB.getLoginStatus(function (response) {
        if (response.session) {
                alert("here");
        }
});