PHP写一个api接口,为什么需要生成一个token值呢。
高洛峰
高洛峰 2017-04-11 10:19:22
[PHP讨论组]

写一个接口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都不一样。缓存还有什么用处呢?

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

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(3)
怪我咯

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

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

巴扎黑

为了安全性,表单提交也会有csrf的token的

伊谢尔伦

本来想说这是jwt
但是看描述,感觉好像是防止重复提交的token

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号