如何存储token比较合适?


在保持多步骤流程一致性时我需要用到token(比如找回密码):

步骤1,用户提交要找回密码的用户名和验证码,我生成token1,返回页面中包含这个token1

步骤2,用户提交他收到的短信验证码和token1,我根据token1来识别是哪个用户,短信验证码是否正确,token是否过期,这个token的使用场景是否正确,如果都有效,我生成一个token2,返回页面包含这个token2

步骤3,用户提交他的新密码和token2,我根据token2来找出是哪个用户,最后重置那个用户的密码

这里的token都有时效性,我存在mysql里,每天都要跑cron job来删除过期的token,这样不太好吧,我应该怎么存token?或者有更好的办法?

java web php 后端

很丑的企鹅 9 years, 7 months ago

token不用存mysql吧,存内存就好了。
一个线程轮训删除过期的token数据。
当然你会说宕机了,内存数据就没了,但是基于找回密码的操作不常有,这个数据不会太多,而时效性一般不会太长,如果真遇到宕机,宕机了用户也无法访问了啊,故这个token就废弃也无所谓,让用户重新提交找回操作。

usoda answered 9 years, 7 months ago

或者不用储存token,有效性信息就放在token里,你看看这个 json web token

比利♂海灵顿 answered 9 years, 7 months ago

可以存memcahe或redis里,缓存设定时间过期。

「最上川」 answered 9 years, 7 months ago

Your Answer