使用php redis实现简单的注册登陆功能

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

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

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

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

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

注册:.net

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

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

二、获取一个自增的用户IDget

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

三、存储用户的基本信息

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

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

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

登陆:

一、获取用户ID

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

二、获取密码

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

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

忘记密码:

一、访问频率限制

判断访问次数是否大于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);

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

二、存储验证码

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

三、给验证码设置过时时间

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

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

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

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

六、若是$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}");

七、经过email获取用户ID,从而修改密码

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

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

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

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

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

参考文章:http://download.csdn.net/detail/mydownloadformweb/8147343

demo代码地址:https://github.com/Ritajiajia/redis_test/tree/master/test/redis-demo

相关文章
相关标签/搜索