使用redis完成註冊和登入
阿新 • • 發佈:2018-12-07
使用redis完成註冊和登入
示例圖:
前提是伺服器安裝了php-redis擴充套件,即phpnfo裡有redis模組
1 表的設計
和mysql資料庫進行對比 redis是鍵值對的儲存方式
例如 使用者表:
每個使用者儲存兩條資訊 因為註冊時要檢視一個使用者名稱是否存在 即根據使用者名稱檢視是否含有對應的userid
user:userid:1:username admin
user:username:admin:userid 1
index.php:
<div id="navbar"> <a href="index.php">主頁</a> | <a href="timeline.php">熱點</a> | <a href="logout.php">退出</a> </div> <form method="POST" action="register.php"> <table> <tr> <td>使用者名稱</td><td><input type="text" name="username"></td> </tr> <tr> <td>密碼</td><td><input type="password" name="password"></td> </tr> <tr> <td>密碼(again)</td><td><input type="password" name="repassword"></td> </tr> <tr> <td colspan="2" align="right"><input type="submit" name="doit" value="註冊"></td></tr> </table> </form>
register.php:
<?php //自增userid相當於mysql的自增主鍵 //global:userid; //判斷cookie是否存在 if($_COOKIE['userid']&&$_COOKIE['username']){ header('location:home.php'); } $username = $_POST['username']; $password = $_POST['password']; $repassword = $_POST['repassword']; if(!$username){ exit('<script>alert("使用者名稱不得為空");history.back()</script>'); } if(!$password){ exit('<script>alert("密碼不得為空");history.back()</script>'); } if($password!=$repassword){ exit('<script>alert("兩次密碼不一致");history.back()</script>'); } $redis = new \Redis(); $redis->connect('127.0.0.1',6379); if($redis->get('user:username:'.$username.':userid')){ exit('<script>alert("使用者名稱已存在");history.back()</script>'); } //寫入資料庫 $userid = $redis->incr('global:userid'); $redis->set('user:userid:'.$userid.':username',$username); $redis->set('user:userid:'.$userid.':password',$password); $redis->set('user:username:'.$username.':userid',$userid); ?>
login.php:
<?php if($_COOKIE['userid']&&$_COOKIE['username']){ header('location:home.php'); } $username = $_POST['username']; $password = $_POST['password']; //過濾資料 if(!$username){ exit('<script>alert("使用者名稱不得為空");history.back()</script>'); } if(!$password){ exit('<script>alert("密碼不得為空");history.back()</script>'); } //驗證使用者名稱和密碼 $redis = new \Redis(); $redis->connect('127.0.0.1',6379); $ruserid = $redis->get('user:username:'.$username.':userid'); //從資料庫查使用者id $rusername = $redis->get('user:userid:'.$ruserid.':username'); //根據id查使用者名稱 $ruserpass = $redis->get('user:userid:'.$ruserid.':password'); //根據id查密碼 if(!$ruserid||($password!=$ruserpass)){ exit('<script>alert("使用者名稱或密碼錯誤");history.back()</script>'); } //生成cookie setcookie('userid',$ruserid); setcookie('username',$rusername); header('location:home.php'); ?>
logout.php:
<?php
//清除cookie
setcookie('userid',null);
setcookie('username',null);
header('location:home.php');
?>
home.php:
<?php
if(!$_COOKIE['userid']||!$_COOKIE['username']){
header('location:index.php');
}