用户注册登录与状态保持

最近也是因为要写『日常-森の咖啡屋』所以需要学习上述原理。因为也是初次体验所以有误或有缺陷请见谅。

以下全部参考例子由PHP语言编写。

用户注册&登录

思路

用户注册&登录思路很简单也很传统,就是:验证用户信息是否符合要求-判断数据库中是否存在相同用户-返回信息。总之,关于安全类的,全要在服务器端验证后再进行,防止用户伪造。但是在此之前,需要先设计好一个数据库表,这一点很重要。

状态保持

思路

这一点我在网上找了了很多思路,但基本的还是不变的,就是不要相信客户端,所有提交的数据必须要在服务器端认证或保存及交换。

要保持全站登录状态有很多方法,这些方法是否安全就要进行筛选与自已的定制。我用的是直接保存cookie的方法,也是一个比较简单的方法了。

用户登录成功后,将 邮箱+密码的md5值 存入json数组,再进行可逆加密,当然加密的key是不外泄的。将结果存入cookie。
在每个需要的网页只要写个函数将其解密后验证邮箱与对应密码,若存在,则状态为登录。

例子

参考

<?php
ini_set("error_reporting","E_ALL & ~E_NOTICE");
    require_once 'function.php';
    if ($_COOKIE["user_info"]) {
        // code...
        // 验证cookie是否有效
        // 有效则返回0
        $ifin=0;
    } else {
        $ifin=1;
    }
    if ($ifin==1) {
    $way = $_POST["way"]; //注册或是登录 注册:reg 登录:sin
    $mail = $_POST["mail"];
    $name = $_POST["name"];
    $username = $_POST["username"];
    $psw = md5($_POST["password"]);
    $time = intval(time());
        //...

        $con=mysql_connect("localhost","root","password"); //连接数据库
        if (!$con) { //连接失败
            die('Could not connect: ' . mysql_error());
        } else {
            if ($way=='reg') { //注册
                if($mail == '' || $name == '' || $username == '' || $psw == '') {
                    echo '请确认注册信息完整性!';
                } else {
                    mysql_select_db("database_name"); //选择数据库
                    mysql_query("set names utf8"); //设定字符集
                    $sql = "select name from table_name where name = '$name' UNION select mail from mori_user where mail = '$mail'"; //SQL语句
                    $result = mysql_query($sql); //执行SQL语句
                    $num = mysql_num_rows($result);    //统计执行结果影响的行数
                    if ($num==0) { //判断是否存在相同用户名&邮箱
                        $sql_insert = "insert into table_name (name,password,mail,screenName,info,created,grouppart,ban) values('$name','$psw','$mail','$username','$info','$time','user','0')";
                        $res_insert = mysql_query($sql_insert);
                        //$num_insert = mysql_num_rows($res_insert);
                        if($res_insert) {
                            echo 'done';
                        } else {
                            echo 'error';
                        }
                    } else {
                        echo '存在相同用户!';
                    }
                }
            } elseif($way=='sin') { //登录
                if ($mail == '' || $psw == '') {
                    echo '请确认登录信息完整性!';
                } else {
                    mysql_connect("localhost","root","password");
                    mysql_select_db("database_name");
                    mysql_query("set names utf8");
                    $sql = "select * from table_name WHERE mail='$mail' AND password='$psw'";
                    $result = mysql_query($sql);
                    $num = mysql_num_rows($result);
                    if($num!=0) {
                        $cookie=array($mail,$psw);
                        $cookie=json_encode($cookie, true); //json方便读取
                        $cookie=encrypt($cookie,'E');  //可逆加密cookie
                        setcookie("user_info", $cookie, time()+24*3600*7,"/"); //全站设置时长为7天的cookie
                        echo 'done!';
                    } else {
                        echo '邮箱或是密码错误!';
                    }
                }
            } else {
                echo 'error';
            }
        mysql_close($con);
        }
    }
?>

最后

数据库设计

顺便说一下多用户及其数据的数据库处理。这一步非常重要,从各方面来讲都是。

这里只是提醒一下,具体的我也不细说,如果没把握可以先深入学习一下和参考一下别人设计的数据库。

如果真的对这方面不熟悉但又要快速写个demo,加个数据库索引吧。

tag(s): web, course
show comments · back · home
Edit with Markdown

已有 4 条评论

  1. crazycabbage

    你好,我的blog使用了你的主题,很漂亮,但现在有一个问题,就是在archive页面不能显示出文章,由于不懂PHP,希望能得到解决的办法,谢谢

    crazycabbage August 1st, 2017 at 05:24 pm回复
    1. Trii Hsia

      请问是『归档』页面吗?如果是的话,请确保 独立页面-...-自定义模版 选择了归档页面。

      Trii Hsia August 1st, 2017 at 05:44 pm回复
      1. crazycabbage

        谢谢了,已经解决。:)

        crazycabbage August 2nd, 2017 at 03:13 pm回复
        1. Trii Hsia

          使用愉快~

          Trii Hsia August 2nd, 2017 at 08:27 pm回复