2012-06-10 46 views
1

我试图使用Facebook连接与PHP,重要的是用户将保持登录到我的网站,即使会话被销毁后。Facebook连接的PHP - 保持登录状态

我已经从SDK运行了with_js_sdk.php示例。在这种情况下,用户必须在每个会话中重新登录。与example.php方法它不会发生,并且用户保持永久登录。

我想问为什么是这样?并且有可能让第一种方法使用户始终登录?

顺便说一下,我想我需要PHP + JS组合,因为我不想在登录时刷新页面。这是真的吗?

谢谢...

+2

为了让用户始终登录,您可以使用具有更长过期时间(您自己的cookie而不是由fb设置的cookie)的cookie。 $ user = $ facebook-> getUser(); 获取有关用户登录状态的cookie。 如果过期用户不再使用。 您可以使用更长的过期时间设置您自己的cookie。 –

回答

1

两个例子都应该离开登录的用户。必要的登录数据被存储在cookie中,并重新使用。

可能是什么问题:我发现“$ user = $ facebook-> getUser();”即使通过用户登录,调用有时也会失败。我的建议并不是依赖那个调用,而是跳到下面的try/catch块,并从那里设置用户。

try { $ user_profile = $ facebook-> api('/ me'); $ user = $ user_profile ['user_id']; (FacebookApiException $ e){ $ user_profile = false; $ user = null; }

由于这看起来更可靠。


如果失败了,您可以自己控制它。步骤是:

  1. 告诉的Javascript不使用cookies
  2. 登录用户中,使用“getAccessToken”功能来获得的登录用户的访问令牌。将其存储在您自己的名称/持续时间的cookie中。
  3. 下次加载页面时,请检查您创建的访问令牌cookie,然后使用“setAccessToken”,然后执行相同的try/catch块。如果用户返回无效,则清除您自己的cookie,因为这意味着accesstoken已被用户无效。

你不应该需要这最后一种方法(除非会话/设备之间共享令牌,或者希望离线访问),因为这是Facebook的SDK做什么 - 但它确实有助于你控制和理解兴田过程更多。


最后,你可以做所有登录/ getAccessToken /存储cookie的方法虽然JavaScript代码,从而在登录用户,并无需刷新页面记住它。只需在auth.login上检查相应的操作即可记住cookie并更改页面内容 - 不要重新加载页面。

下次用户刷新页面/返回到站点时,cookie将被PHP读取。请记住在注销时清除cookie。

所以你可以做你想做的,是的。