我在一些公司的REST Web服务文档中看到,在第1步中要求APIkey,他们将返回服务器时间和到期时间以及auth_key作为响应.在步骤2中,对于登录用户名密码和apikey和auth_key的md5,它将返回会话ID.在剩余步骤中,用户仅发送会话ID.怎么可能?通过会话?我很困惑,请帮助我
Emm*_*eke 12
他们实际上并没有session在PHP的意义上使用它session_start().他们真正做的事情可以通过几个步骤来解释:
auth_key有生命周期api key,auth_key并且expiry到数据库表.本api key是极有可能在表上唯一索引.api key,auth_key并且expiry所述键.md5(api_key . auth_key):我希望您也可以api key在标题中发送.
api key来查询数据库表auth_key值和到期日auth_key没有过期; 如果还没有md5(api_key . auth_key)md5(api_key . auth_key)与您的请求进行比较session_id与之关联的唯一authenticated accountsession_id,account_id.我在这里使用帐户ID,因为它最有可能使用.session_id给您的客户端session_id都是这样的:
session_id从请求中检索session_id从数据库中检索与该关联的帐户总之,这就是整个流程; 这就是为什么我之前说过,当你做会话时,它不会在会话的工作方式中使用会话session_start(); 意思是他们做不了什么$_SESSION.您还应该知道,尝试使用session_startRESTful API 进行会话并非RESTful.
由于Rajan的评论而更新
@Rajan这个答案只是基于这个问题的解释; 你不应该想太多.回答你的问题; 查看API密钥,并将Auth密钥作为帮助识别用户的过程的两个部分:
每次发送请求时,都会发送公钥,以及通过组合公钥和私钥生成的字符串.服务器获取公钥,搜索有效的私钥,并尝试使用相同的公式计算值,然后最终将其生成的内容与您生成的内容进行比较.
如果它们是相同的,它会继续处理; 如果它们不同,它会终止执行.
上面会话id的有效性可以是你想要的任何东西,通常它会是长寿的(可能持续长达30天).
希望这能回答你的问题?