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

标签 php cookies facebook authentication

我在使用 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/

相关文章:

python - 在 Python 中访问 Firefox 3 cookie

java - 我如何在 java 中做 facebook 批处理 fql

php - YouTube API结果到Mysql

php - 有什么方法可以在核心 php 代码中访问 WordPress 数据库

php - 如何使用不同的 css 和 js 创建一个 php header ?

nginx - 如何通过cookie名称获取nginx cookie值

PHP cookie superglobal 好像没有设置

PHP Facebook Graph API 获取带有用户照片字段的帖子评论

javascript - jQuery live 不工作

php - CodeIgniter 查询 : How to move a column value to another column in the same row and save the current time in the original column?