如何在REST API中使用会话

Aru*_*run 6 php rest

我在一些公司的REST Web服务文档中看到,在第1步中要求APIkey,他们将返回服务器时间和到期时间以及auth_key作为响应.在步骤2中,对于登录用户名密码和apikey和auth_key的md5,它将返回会话ID.在剩余步骤中,用户仅发送会话ID.怎么可能?通过会话?我很困惑,请帮助我

Emm*_*eke 12

他们实际上并没有session在PHP的意义上使用它session_start().他们真正做的事情可以通过几个步骤来解释:

  1. 您要求API密钥:
    1. 然后,该服务生成一个auth_key有生命周期
    2. 保存生成的api key,auth_key并且expiry到数据库表.本api key极有可能在表上唯一索引.
    3. 发送到包含所生成的用户的响应api key,auth_key并且expiry所述键.
  2. 您发送登录详细信息以及md5(api_key . auth_key):我希望您也可以api key在标题中发送.
    1. 它首先使用receive api key来查询数据库表
    2. 检索auth_key值和到期日
    3. 检查auth_key没有过期; 如果还没有
    4. 计算 md5(api_key . auth_key)
    5. 将其md5(api_key . auth_key)与您的请求进行比较
    6. 如果它是相同的,那么它会检查您的登录详细信息
    7. 如果登录详细信息正确,则会生成session_id与之关联的唯一authenticated account
    8. 它将这些细节保存到另一个数据库表:session_id,account_id.我在这里使用帐户ID,因为它最有可能使用.
    9. 它将此返回session_id给您的客户端
  3. 之后发送的每个请求session_id都是这样的:
    1. session_id从请求中检索
    2. 它尝试session_id从数据库中检索与该关联的帐户
    3. 如果找到/有效并且您具有执行操作的访问/权限,则执行该命令.

总之,这就是整个流程; 这就是为什么我之前说过,当你做会话时,它不会在会话的工作方式中使用会话session_start(); 意思是他们做不了什么$_SESSION.您还应该知道,尝试使用session_startRESTful API 进行会话并非RESTful.

由于Rajan的评论而更新

@Rajan这个答案只是基于这个问题的解释; 你不应该想太多.回答你的问题; 查看API密钥,并将Auth密钥作为帮助识别用户的过程的两个部分:

  • 一个公共:API密钥
  • 一个私人:Auth键

每次发送请求时,都会发送公钥,以及通过组合公钥和私钥生成的字符串.服务器获取公钥,搜索有效的私钥,并尝试使用相同的公式计算值,然后最终将其生成的内容与您生成的内容进行比较.

如果它们是相同的,它会继续处理; 如果它们不同,它会终止执行.

上面会话id的有效性可以是你想要的任何东西,通常它会是长寿的(可能持续长达30天).

希望这能回答你的问题?