使用redis完成注册和登录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41179401/article/details/84778316

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

猜你喜欢

转载自blog.csdn.net/qq_41179401/article/details/84778316
今日推荐