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

这个问题与我的另一个问题有关: 如何知道用户是否退出Facebook,FB.Event.Subscribe不起作用

在那个问题中,我试图在用户退出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弹出一个对话框,要求用户登录。 但是如果用户取消它,他仍然可以使用我的应用程序(导致他与我的应用程序服务器的会话尚未过期!)。

在文档中 ,FB dev说:

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

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

有谁知道解决这个问题?

谢谢你的帮助,

黄龙

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

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

 FB.init({ appId:'${appId}', cookie: false, status: true, xfbml: true }); FB.getLoginStatus(function (response) { if (response.session) { alert("here"); } });