什么';s是存储Facebook的标准方法';s访问令牌?数据库或cookie


What's the standard method to store Facebook's access tokens? Database or cookie?

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

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

如果我把它存储在数据库中,那么我会把用户的ID存储在cookie中吗?

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

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

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

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

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

所以,对于普通的东西,可以存储在会话或cookie中,这取决于哪种更适合你的网站。这是最简单的。

你只会出于两个目的去研究数据库中存储的复杂性:

  1. 你有另一个会话系统来控制你的应用程序(尤其是第三方应用程序,你不想干扰它们的内部会话系统,所以在上面添加你自己的包装器)
  2. 当用户不在场时,你想做一些事情(例如,在你自己的版主系统中批准评论后贴到墙上)。在这种情况下,您需要令牌来批准帖子,但由于用户不在,您无法访问$_COOKIE或$_SESSION等

希望能有所帮助。