PHP写一个api接口,为什么需要生成一个token值呢。

查看:298
本文介绍了PHP写一个api接口,为什么需要生成一个token值呢。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

写一个接口api, 我觉得只要为每一个请求数据的用户生成一个唯一的 name 和key(密钥),然后用一个表user_api 字段有 id name key 把它存入到表user_api中,每次用户请求数据时,只要提交参数name和key,然后服务器端把参数在user_api表中验证一下就行了,有数据就允许用户请求数据,没有就拒绝请求。

问题:
1.我在公司【项目1】里,看到之前写的接口除了验证name和key合法外,为什么还要生成一个token值呢,然后把这个token值缓存起来设置有效期时间。这个是不是有点多余了啊。
2.代码里面有一个获取token值的方法 getToken();但是我发现公司【项目2】里去调用【项目1】里的数据时,每次调用之前都要先去请求getToken()这个获取token值的接口,获取到token值后,在一并把name、key、token和其它一些参数提交到请求数据的相应的接口。
此时,数据接口会验证name key token。token的验证是和缓存的token对比的。

疑惑:
如上所述,如果是这样的话,每次请求数据时,都要事先调用获取token值的方法 getToken()【该方法通过生成随机字符串和name、key处理生成】,说明每次请求数据接口时获取到的token值都是不一样的,那之前缓存起来的token还有什么用呢。
比如,我要请求一个用户名数据的接口 getUserName();
第一次请求 用户名数据的接口 getUserName()时,我生成了一个token值,然后我把浏览器关闭了。再次请求用户名数据的接口 getUserName(),又生成了一个新的token值。那之前设置的什么缓存token并设置有效期还有什么用呢?就算把他设置成2个小时过期,每次请求接口时,token都不一样。缓存还有什么用处呢?

谁给解释解释,一直想不通这个点。

解决方案

我觉得楼上说的不完全对吧 根据题主的意思是
1.token值为什么不能直接放数据库表里
2.token为什么要缓存起来

我的理解是
1.可以放数据库表里,但是频繁读取数据库(api调用的量不会小的)获取这种数据没意义,因为没有持久化的必要
2.缓存起来使用方便啊,降低服务器压力啊。你想啊,token是防止非法的请求包的,调用方根据一定的规则获取了token或者生成token以后,在一定时间内被截获token的可能是有的,但是权衡一下利弊,设置一个合理的过期时间是可以接受的,比如微信接口的token有个过期时间,这样就可以在这个时间内不用重复获取了。因为每个请求都要获取token的话服务器压力肯定很大的(少量请求的应用看不出来,但是像微信这个级别的应用,任何一点多余的请求都是成百上千的费用啊)

这篇关于PHP写一个api接口,为什么需要生成一个token值呢。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆