redis缓存用户详情php,使用php redis实现简单的注册登录功能

主要使用的是hash结构来存储用户数据,列表来存储访问的频率

email.to.id存储的是邮箱和用户id的对应关系

user:{$userID}存储的是用户的email、password、nickname基本数据

retrieve.password.code:{$verifyCode}存储的是该验证码发送给的email

rate:limit:{$email}存储的是该邮箱的访问的时间

注册:

1、判断email是否已经被注册过

$redis->hexists('email.to.id', $email);

2、获取一个自增的用户ID

$redis->incr('users:count');

3、存储用户的基本信息

$redis->hmset("user:{$userID}", ['email' => $email, 'password' => $password, 'nickname' => $nickname]);

4、记录邮箱和用户ID的对应关系

$redis->hset('email.to.id', $email, $userID);

登录:

1、获取用户ID

$redis->hget('email.to.id', $email);

2、获取密码

$redis->hget("user:{$userID}", 'password')

3、比较输入的密码和获取的密码

忘记密码:

1、访问频率限制

判断访问次数是否大于10

$redis->llen("rate:limit:{$email}")

没有超过限制的10,存入当前访问的时间

$redis->lpush("rate:limit:{$email}", time());

超过了限制的10次,

获取第一次访问的时间

$redis->lindex("rate:limit:{$email}", -1);

判断当前的时间和第一次访问的时间是否间隔一分钟

超过一分钟,存入当前访问的时间,并把第一次访问的时间移除

$redis->lpush("rate:limit:{$email}", time());

$redis->ltrim("rate:limit:{$email}", 0, 9);

未超过一分钟提示用户,超过才能访问

2、存储验证码

$redis->hmset("retrieve.password.code:{$verifyCode}", ['email' =>$email, 'newPassword' => $newPassword]);

3、给验证码设置过期时间

$redis->expire("retrieve.password.code:{$verifyCode}",  24*60*60);

4、发送邮件,邮件内容中的url是携带验证码

5、点击邮件中url,获取到验证码,判断验证码是否过期

$ttl = $redis->ttl("retrieve.password.code:{$verifyCode}");

6、如果$ttl > 0验证码没有失效,获取email、newPassword

$redis->hget("retrieve.password.code:{$verifyCode}", 'email');

$redis->hget("retrieve.password.code:{$verifyCode}", 'newPassword');

验证码失效,删除key

$redis->del("retrieve.password.code:{$verifyCode}");

7、通过email获取用户ID,从而修改密码

$redis->hget('email.to.id', $email);

$redis->hset("user:{$userID}", 'password', $newPassword);

8、修改密码成功,删除验证码key

$redis->del("retrieve.password.code:{$verifyCode}");

ps:主要写出的是redis相关的,其他功能未实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值