在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"); } });
- 如何以编程方式在春季社交的Facebook页面上发帖?
- Buck – java.lang.UnsatisfiedLinkError:找不到“libjni.so”。 怎么解决?
- FB SDK无法在OS 7上运行
- 如何为键是可变的JSON字符串创建一个java类?
- 如何使用xmpp连接Facebook聊天,我想输入朋友的用户名,然后聊天显示SASL身份validation失败
- JSP中的Facebook Connect示例(tomcat)
- 为什么Selenium驱动程序无法识别Facebook登录页面的ID元素?
- Android – 现有片段与Facebook SDK冲突?
- Android:分享图片意图不与Facebook合作?