【问题标题】:Update cookies for Facebook connect based site?更新基于 Facebook 连接的网站的 cookie?
【发布时间】:2010-12-31 16:33:19
【问题描述】:

我在使用 PHP 构建的网站上将 Facebook Connect API 用于登录系统。没有直接的方法来确定用户是否已登录。

$fb = new Facebook($api, $secret);
$fb->get_loggedin_user();  

上面的函数总是返回一个用户ID,一旦用户通过网站认证,即使他们退出Facebook,它仍然返回他们的用户ID。
我已经为此工作了一段时间,环顾四周后,我认为这样做的原因是当用户在网站上通过身份验证时,Facebook JavaScript API 会存储用于保存会话信息的 cookie。 但是,如果用户退出常规 Facebook 会话,即使会话不再有效,cookie 仍会返回值。
我的问题是如何更新 cookie,以便在会话不再有效时它们不会给我值?

【问题讨论】:

    标签: php cookies facebook authentication


    【解决方案1】:

    这可能有点棘手。基本上,Facebook 在用户浏览器上存储了一堆 cookie,这些 cookie 被命名为您的应用程序 ID(即12345_fb_sig=etc)。这些 cookie 用于告诉您的 FB Connect 应用程序用户已登录 Facebook,并传递 facebook 会话 ID。但是,如果用户去其他地方并注销,这些 cookie 不会被清除,并且就您的 Connect 站点而言,用户仍处于登录状态。如果用户稍后回来并且您尝试使用该 API 调用会话密钥,它将失败。

    您可以从服务器端库调用到 PHP FB API 客户端 $facebook->api_client->clear_cookie_state() 清除这些 cookie,但是我不推荐这种方法。它要求您在每次页面加载时进行某种 API 调用,以确认会话密钥仍然有效,这会增加很多开销。

    通常,处理此问题的最佳方法是使用您已经用于 FB Connect 的 FB Javascript 库。您可以将参数添加到用于设置 FB Connect 的 FB.init() 调用中,如果客户端的会话状态发生更改,将强制刷新页面:

    FB.init("<YOUR-API-KEY>", "<YOUR-CROSS-DOMAIN-CHANNEL-URL>", {"reloadIfSessionStateChanged":true}); 
    

    这有点不雅,因为用户会看到页面重新加载,但这可能是最好的确定方法。我强烈建议您查看Detecting Connect Status wiki 页面以了解有关这些技术的更多信息。

    【讨论】:

    • 当你说它会重新加载页面时,这是否只有在他们注销 facebook 时才会发生?
    猜你喜欢
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多