夺命雷公狗---Redis---6-案例操作1(注册-登录)
完成用户注册,用户登录,分页功能,完成数据的增删改查,添加好友的功能
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>