1

我正在尝试使用 facebook 与 php 连接,即使在会话被破坏后用户仍将保持登录到我的网站,这一点很重要。

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

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

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

谢谢...

4

1 回答 1

1

这两个示例都应该让用户保持登录状态。必要的登录数据存储在 cookie 中并重复使用。

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

试试 { $user_profile = $facebook->api('/me'); $user = $user_profile['user_id']; } 捕捉 (FacebookApiException $e) { $user_profile = false; $用户=空;}

因为这看起来更可靠。


做不到这一点,你可以自己控制这一切。步骤是:

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

您不应该需要最后一种方法(除非在会话/设备之间共享令牌,或希望离线访问),因为这正是 facebook SDK 所做的 - 但它确实可以帮助您更多地控制和理解 hte 过程。


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

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

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

于 2012-06-10T11:13:03.217 回答