我在使用PHP构建的网站上使用Facebook Connect API登录系统。没有直接的方法来确定用户是否已登录。
$fb = new Facebook($api, $secret);
$fb->get_loggedin_user();
上述功能始终返回用户ID,一旦用户通过网站进行身份验证,即使他们退出Facebook,它仍会返回用户ID。
我已经研究了一段时间,在浏览之后,我认为这样做的原因是因为当用户在网站上进行身份验证时,Facebook JavaScript API会存储用于保存会话信息的cookie。登记/>
但是,如果用户退出常规Facebook会话,即使会话不再有效,cookie仍会返回值。
我的问题是如何更新cookie,以便在会话不再有效时他们不会给我值?
答案 0 :(得分:3)
这可能有点棘手。基本上,Facebook在用户的浏览器上存储了一堆cookie,这些cookie被命名为您的应用程序ID(即12345_fb_sig
=等)。这些cookie用于告诉您的FB Connect应用程序用户已登录到Facebook,并传递facebook会话ID。但是如果用户去了其他地方并注销,这些cookie就不会被清除,就你的Connect网站而言,用户仍然会登录。如果用户稍后再回来,你会尝试使用该API进行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维基页面,了解有关这些技术的更多信息。