1. 程式人生 > >使用redis完成註冊和登入

使用redis完成註冊和登入

使用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');
}