夺命雷公狗---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>

 

posted @ 2015-11-12 17:08  夺命雷公狗  阅读(233)  评论(0编辑  收藏  举报