php-更新基于Facebook连接网站的cookie?

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

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

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

解决方法:

这可能有点棘手.基本上,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页面,以获取有关这些技术的更多信息.

上一篇:c#-Microsoft身份验证自动登录帐户.用户手动选择帐户时导致“关联失败”错误


下一篇:python-现代客户端/服务器身份验证技术