您的位置:首页 > 数据库 > Redis

夺命雷公狗---Redis---6-案例操作1(注册-登录)

2015-11-12 17:08 591 查看
完成用户注册,用户登录,分页功能,完成数据的增删改查,添加好友的功能

1、完成用户注册

公共文件:redis.php

注册页面:reg.php

处理注册用户的页面action.php

用户列表页面:index.php

登录页面:login.php

我们要考虑reg发送数据到actrion页面后如何redis数据库

废话不多说,开干

使用哈希来存储注册的用户信息:

如何构建存储用户的哈希的键

$id = $redis->incr(‘id’);//没刷新一次+1和mysql里面的自动增长其实差不多

user:id:$id ==èhmset(user:id:$id,array(‘id’=>$id,’username’=>$username))

因为连接redis属于一个公共文件,所以创建一个redis.php

<?php
$redis = new Redis();
$redis -> connect('localhost',6379);
$redis -> auth('123456');//因为我修改了配置文件的密码是123456


下一步就开始写注册页面了reg.php

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<form action="action.php?act=reg" method="post">
<table>
<caption><h1>用户注册</h1></caption>
<tr>
<th>name</th>
<td><input type="text" name="username"></td>
</tr>
<tr>
<th>pass</th>
<td><input type="password" name="pass"></td>
</tr>
<tr>
<th>age</th>
<td><input type="text" name="age"></td>
</tr>
<tr>
<td align="rigth"><input type="submit" value="注册" /></td>
<td align="center"><input type="reset" value="重置"></td>
</tr>
</table>
</form>
</body>
</html>


这里完事,下一步就到了注册成功跳转页面了index.php

<?php
header("Content-Type:text/html;charset=utf-8");
echo "欢迎来到首页";
echo "<a href='./action.php?act=unse'>清空session</a>";
session_start();
var_dump($_SESSION);


下一步就开始写注册处理页了,action.php

<?php
header("Content-Type:text/html;charset=utf-8");
require "redis.php";
$act = isset($_GET['act']) ? $_GET['act'] : '';
if($act == 'reg'){
//完成用户注册处理
//接收用户名和密码以及年龄
$username = $_POST['username'];
$password = $_POST['pass'];
$age = $_POST['age'];
$res = $redis -> get('username:'.$username);

//判断下如果帐号是否存在
if(!empty($res)){
echo "<script>alert('抱歉,您的的用户名已存在!');window.location.href='./reg.php';</script>";die;
}
//生成自增的id
$id = $redis -> incr('id');  //就算一开始没有id这个键,他也会自动增长的
//构建哈希的键
$key = "user:id".$id;

//数据存储成哈希
$redis -> hmset($key,array('id'=>$id,'username'=>$username,'password'=>$password,'age'=>$age));

//把用户名和id的关系存储起来,便于在登录时验证
//我们使用字符串类型来存储该关系'username:'.$username;作为字符串的键,值为id
//$redis -> get('username:'.$username);//在存储前,验证下用户名是否存在
$redis -> set('username:'.$username,$id);
session_start();
$_SESSION['username'] = $username;
$_SESSION['user_id'] = $id;
header("location:index.php");
}else if($act=='login'){
//处理登录的程序
//接收输入的用户名和密码
$username = $_POST['username'];
$password = $_POST['pass'];
//更具用户名找出id
$id = $redis -> get("username:".$username); //取出存储的id
if(!$id){
echo "<script>alert('抱歉,您输入的用户名有误!');window.location.href='./login.php';</script>";die;
}

//根据id拼接哈希的键
$key = "user:id".$id;

//在哈希里取出密码的字段
$pass = $redis -> hget($key,'password');

//判断用户输入的密码和取出的密码是否一致
if($password == $pass){
//如果一样的证明是合法的用户
session_start();
$_SESSION['username'] = $username;
$_SESSION['user_id'] =$id;
header("location:index.php");
}else{
echo "<script>alert('抱歉,您输入的用户名或密码有误!');window.location.href='./login.php';</script>";die;
}

}else if($act =='unse'){
session_start();
session_destroy();
header("location:login.php");
}


完事后开始测试注册两个帐号,然后查看redis里面没注册前数据时空的,注册后数据是否和这里的一样,如果一样,恭喜成功



下一步就开始写登录页面了login.php,我们做的前提是要考虑下如何从redis里面将数据拿出来和用户输入进来的进行匹配

决解的思路是:

找到哈希的键,取出密码的字段进行匹配即可

哈希的键我们目前只是知道user:id:$id,但这里面的$id我们可以根据用户输入的用户名找出id,只要id能找出来,那哈希的键也意味着找到了。

这样说明我们刚才所做的注册还没完成做好,要把用户名和id的关系存储起来,才可以更加的便于在登录时候做验证。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form action="action.php?act=login" method="post">
<table>
<caption><h1>用户登录</h1></caption>
<tr>
<th>name</th>
<td><input type="text" name="username"></td>
</tr>
<tr>
<th>pass</th>
<td><input type="password" name="pass"></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
<td><input type="reset" name="重置"></td>
</tr>
</table>
</form>
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: