强制刷新Facebook会话
是否可以强制刷新Facebook会话,或者可以在文档中多次调用“FB.init”函数。因为它很长时间以来我不会过多详细说明,但我一直在研究这个问题一段时间,而且它看起来有必要做到这一点。强制刷新Facebook会话
我有一个是每30秒来检查,如果Facebook的用户登录调用的脚本,这是简单地由此实现:
window.fbAsyncInit=function(){
// Initialize the Facebook object
FB.init({
appId:"123",
status:true,
cookie:true,
xfbml:true,
oauth:true
});
// Check the Facebook session status every 30 seconds
setTimeout(function(){
// Pass the Facebook object to the welcome function
fb_welcome(FB);
,30000);
};
在“fbWelcome”功能,我测试一下,看看是否用户使用getLoginStatus
函数通过Facebook登录。依赖于响应,我然后更改页面上的元素。但是,我所做的一件事情就是让所有这些都出错。
如果用户登录到Facebook,那么我使用ajax发送一个请求到我的API,返回Facebook用户的详细信息。该API使用PHP与Facebook API进行通信。如果用户在加载页面时登录到Facebook,则不会有任何问题。但是,如果用户未登录到Facebook,并在我的站点上的另一个选项卡上登录Facebook,则会话不会刷新,并且由于访问令牌和签名请求无效,因此无法访问详细信息。因此,我需要一种方法来使用javascript刷新访问令牌和会话中的签名请求,以确保PHP API可以正确读取它们。
我很确定,通过再次调用FB.init函数,这将解决它,因为它会刷新会话。但是,我不确定我是否打算每页多次调用一次该函数。这是否允许?它会搅乱一切吗?
就在几个注意事项:
- 我知道我可以检索通过JavaScript的SDK和FB.api的用户的详细信息,但是,我不想对具体的原因做
- 我也知道,我可以通过访问令牌和签名的请求到PHP API,但我也不想对特殊原因
任何帮助非常赞赏这样做
尽管我还没有回答我的问题,但我已经使用我不想使用的解决方案之一解决了问题。我现在使用Javascript API而不是我自己的API检索用户详细信息,因为我无法将新的Facebook会话传递给PHP API。
我试图再次调用init函数,虽然我能够,但它完全没有效果,再加上我不是真的想成为解决方案,因为我不应该重新初始化Facebook库,只是为了刷新会话。
无论如何,我会留下这个开放的,以允许其他人给出他们的意见,如果他们有任何。似乎试图在PHP和Javascript SDK之间进行通信在某些情况下是真正的挑战,我遇到过的问题的数量...
也许我不明白你在做什么。但是,如果你想验证服务器端的Facebook会话,只需抓住facebook cookie并做auth服务器端来获取access_token。将该access_token存储在会话中,然后在每次用户访问您的api时进行验证。只要用户登录到Facebook,facebook cookie应该可用,并且您只需验证access_token是否有效。如果没有,请检索新的令牌。如果Cookie和标记都无效,则将您的用户重定向到init。
感谢您的回复,但这不是问题。访问会话服务器端很容易,尽管我在过去遇到过一些问题......问题在于通过AJAX将会话从Javascript传递到PHP。虽然这很好,但一旦会话改变就会失败,这就是我被卡住的地方。无论我做了什么,我都无法让我的API在不重新加载页面的情况下接收新会话。不管怎么说,还是要谢谢你 :-) – 2012-03-18 23:01:34
我很想知道你是如何做到这一点的;我试图用JS API做同样的事情。 – 2012-04-23 10:12:16
@JamieDexter最后我不得不使用FB.api!我尝试了很多不同的东西,无济于事......我写的每一件破解都不够可靠,最终不值得进一步发展。我不得不整合Facebook API,这显然还没有准备好与其整合,这令人非常恼火。除非与Facebook进行整合是您业务的必要条件,否则请远离它。你永远不能保证它会起作用,即使你的代码是好的! – 2012-04-24 13:53:17