PHP入门第三天

因为Web安全PHP网站居多 所以找了一个PHP入门的教程 以这里为笔记根据地

纠正第二天的错误

第二天中 我们为了过滤用户输入的特殊字符,创建了一个这样的函数

function filter_str($value){
   if(!get_magic_quotes_gpc()){
       $value = addcslashes(trim($value));
       return $value;
   }
   return $value;
}

但是昨天在提交的时候却报错了,因为 addcslashes() 函数需要两个参数
在这里插入图片描述
前面的参数是需要转义的值或者变量,后面为需要转义的内容,我们这里需要转义 ’ (单引号),所以加一个参数就可以了,这里因为是单引号,所以框起单引号时应当使用双引号

function filter_str($value){
    if(!get_magic_quotes_gpc()){
        $value = addcslashes(trim($value),"'");
        return $value;
    }
    return $value;
}

使用Session进行用户身份验证

之前我们做好了登录的登录框,现在我们应该实现权限验证
这里使用的是Session进行用户验证,因为Cookie可以被伪造 而Session相对Cookie来说更加安全

session_start();

为开启session验证,通常需要在最前面进行声明
在这里插入图片描述
我们将它写在config.php文件的第一行
因为我们的init.php引用了config.php页面 而login.php引用了init.pjp页面 所以login.php相当于引用了config.php页面
我们在登录成功处将Session赋予一个值,这个值是$row变量中的username键的值
在这里插入图片描述
随后我们新建一个页面,作为登录之后的页面,在页面的开头判断$_SESSION的参数在这里插入图片描述

我们直接进行登录,因为$_SESSION参数没有’username’,所以会提示我们身份验证失败在这里插入图片描述
等我们登录成功,分配Session之后,再去访问main.php页面在这里插入图片描述
可以看到登录成功之后,就给我们分配了Session值,这个时候我们再去访问main.php页面,就可以回显我们的username了
在这里插入图片描述在这里插入图片描述
可以看到我们请求这个页面的时候会有Session值
随后我们再去网站的目录中去搜索我们的SESSID值在这里插入图片描述
可以看到是事实存在的一个文件,我们打开查看一下在这里插入图片描述
里面有一个字符串,所以我们也可以在其他的页面中随时调用这个文件,可以做权限验证,例如username不等于admin的话,就不允许登录后台管理页面

那么Session身份验证差不多就做完了

接下来我们就开始做我们的前端验证,因为我们login.php页面都是PHP的后端验证
例如我们判断提交的参数不能为空,或者限制提交的参数字符长度等等

我们给form表单给一个属性在这里插入图片描述

<form method="post" onsubmit="return false">

onsubmit 如果返回的是 false 则这个表单不会提交,如果返回的是 true 就会提交

那么我们就可以使用Js创建一个函数来判断from的值是否选择提交该表单在这里插入图片描述

    <script>
        function check(form){
        }
    </script>
    <form method="post" onsubmit="return check(this)">

check(this) 中的this表示false的本身,然后在check函数获取false这个值,这个form随便命名,一般来说和form表单一样的名字
之后我们在JavaScript代码中以对象的方法获取 form 表单中 usernamepassword 的值

<script>
    function check(form){
        var username = form.username.value;
        var password = form.password.value;
    }
</script>

然后我们进行判断
在这里插入图片描述

username.length 取出 username 的长度 如果等于0,那么就为空
alert() 为弹窗提示
form.username.focus() 自动把焦点切换到username的输入框
return false 返回错误,不提交表单数据
如果两个判断都通过的话 这个函数就返回 true

 <script>
     function check(form){
         var username = form.username.value;
         if(username.length == 0){
            alert("用户名不能为空")
            form.username.focus();
            return false;
        }
        var password = form.password.value;
        if(password.length == 0){
            alert("密码不能为空")
            form.password.focus();
            return false;
        }
        return true;
   	 }
 </script>

前端的判断写完之后
登录成功还需要跳转
在这里插入图片描述
这里使用header()进行跳转

这样我们点击登录如果成功登录的话就跳转到了main.php页面
登录成功之后我们还可以把$conn的句柄关闭掉

<?php
include_once 'init.php';

if($_POST['sub']){
    $username = filter_str($_POST['username']);
    $password = md5(filter_str($_POST['password']));
    $result = $conn->query("select * from users where username='$username' and password='$password'");
    if ($result->num_rows > 0) {
        $row=$result->fetch_assoc();
        if($row['password']==$password){
            $_SESSION['username'] = $row['username'];
            header('Location:main.php');
            $conn->close();           # 关闭句柄
        }else{
            echo "<script>alert('用户或密码错误')</script>";
        }
    } else {
        echo "<script>alert('用户或密码错误')</script>";
    }
}
?>

那么登录的话就基本完成了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a7xq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值