我在使用 PHP 构建的网站上使用 Facebook Connect API 作为登录系统。没有直接的方法来确定用户是否已登录。
$fb = new Facebook($api, $secret);
$fb->get_loggedin_user();
上面的函数总是返回一个用户ID,一旦用户通过网站验证,即使他们退出Facebook,它仍然返回他们的用户ID。
我已经为此工作了一段时间,环顾四周后,我认为这样做的原因是当用户在网站上进行身份验证时,Facebook JavaScript API 会存储用于保存 session 信息的 cookie。< br/>
但是,如果用户退出常规 Facebook session ,cookie 仍会返回值,即使该 session 不再有效。
我的问题是如何更新 cookie,以便它们在 session 不再有效时不给我值?
最佳答案
这可能有点棘手。基本上,Facebook 在用户的浏览器上存储了一堆 cookie,这些 cookie 被命名为您的应用程序 ID(即 12345_fb_sig
=etc)。这些 cookie 用于告知您的 FB Connect 应用程序用户已登录 Facebook,并传递 facebook session ID。但是,如果用户去其他地方并注销,这些 cookie 不会被清除,就您的 Connect 站点而言,用户仍处于登录状态。如果用户稍后回来,您尝试使用该 API 调用 session key ,它将失败。
您可以通过对 PHP FB API 客户端的服务器端库调用 $facebook->api_client->clear_cookie_state()
清除这些 cookie,但是,我不推荐这种方法。它要求您在每次页面加载时进行某种 API 调用,以确认 session key 仍然有效,这会增加很多开销。
通常,处理此问题的最佳方法是使用您已经用于 FB Connect 的 FB Javascript 库。您可以向用于设置 FB Connect 的 FB.init()
调用添加一个参数,如果客户端的 session 状态已更改,它将强制刷新页面:
FB.init("<YOUR-API-KEY>", "<YOUR-CROSS-DOMAIN-CHANNEL-URL>", {"reloadIfSessionStateChanged":true});
这有点不雅,因为用户会看到页面重新加载,但这可能是确定的最佳方式。我强烈建议您查看 Detecting Connect Status有关这些技术的更多信息的维基页面。
关于php - 更新基于 Facebook 连接的站点的 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1989959/