3

不久前我用 SDK 制作了一些 Facebook 应用程序,但现在我想尝试在不使用 SDK 的情况下制作一个。我对访问令牌的工作方式感到困惑。

我认为 Facebook 的 PHP SDK 将访问令牌存储在 cookie 中,但 SO 上的大多数人似乎将其存储在数据库中。我应该在哪里存储访问令牌?

如果我将它存储在数据库中,那么我是否将用户的 ID 存储在 cookie 中?

4

1 回答 1

8

这几乎是一个讨论问题,因为答案取决于你想用它做什么。

只是一个快速的过程提醒:

  1. 获取令牌(从某处)
  2. 与 Facebook 交谈并获取与该令牌关联的用户 ID
  3. 更新令牌(如果寻找长访问令牌)
  4. 存储令牌(如果您想稍后记住它)
  5. 使用 UserID 执行某些操作,使用令牌验证调用。

令牌是facebooks“SessionID”。只要您持有令牌,您就可以找到拥有令牌的用户(如果令牌仍然有效)。如果您编写自己的会话处理程序,则可以像使用常规 SessionID 一样保留该令牌:

  • 在 PHP 会话处于活动状态时将持续存在的会话变量 ($_SESSION)
  • 在 cookie ($_COOKIE) 中,它会在 cookie 有效时持续存在
  • 通过在网页之间作为 $_GET 或 $_POST 变量传递
  • 在数据库中 - 但是您必须在我们自己的控制下拥有另一个 SessionID(在 $_SESSION、$_COOKIE、$_GET 或 $_POST 中传递)或获取正确令牌的其他方式。

因此,对于工厂的运行,存储在会话或 cookie 中,这取决于哪个更适合您的站点。这是最简单的。

您只会出于两个目的考虑在数据库中存储的复杂性:

  1. 您有另一个会话系统正在控制您的应用程序(尤其是第三方应用程序,您不想弄乱他们的内部会话系统,因此在顶部添加您自己的包装器)
  2. 您想在用户不在时做一些事情(例如,在您自己的版主系统中批准评论后发布到墙上)。在这种情况下,您需要令牌来批准帖子,但由于用户不在那里,您无权访问 $_COOKIE 或 $_SESSION 等。

希望有帮助。

于 2012-07-30T04:48:39.777 回答