使用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

相關文章
相關標籤/搜索