Facebook连接php - 保持登录状态

时间:2012-06-10 07:49:22

标签: php facebook facebook-php-sdk

我正在尝试使用facebook连接php,并且即使在会话被销毁之后,用户仍将保持登录我的网站非常重要。

我在SDK中运行了with_js_sdk.php示例。在这种情况下,用户必须在每个会话中再次登录。使用example.php方法,它不会发生,用户将永远保持登录状态。

我想问为什么?是否有可能让第一种方法让用户始终登录?

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

谢谢...

1 个答案:

答案 0 :(得分:1)

两个示例都应该让用户登录。必要的登录数据存储在cookie中并重新使用。

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

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

因为这看起来更可靠。


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

  1. 告诉Javascript不要使用cookies
  2. 将用户登录并使用“getAccessToken”函数获取已登录用户的访问令牌。将其存储在您自己姓名/持续时间的cookie中。
  3. 下次加载页面时,检查您创建的访问令牌cookie,然后使用“setAccessToken”,然后执行相同的try / catch块。如果用户返回无效,则清除您自己的cookie,因为这意味着用户已使accessstoken失效。
  4. 你不应该需要这种最后的方法(除非在会话/设备之间共享令牌,或者希望离线访问),因为这正是facebook SDK所做的 - 但它确实有助于你更多地控制和理解hte进程。


    最后,您可以通过JavaScript执行所有login / getAccessToken / store cookie方法,从而在不刷新页面的情况下记录用户并记住它。只需检查auth.login上的相应操作即可记住cookie并更改页面内容 - 不要重新加载页面。

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

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