这个问题与我的另一个问题有关: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
答案 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");
}
});