PHP单文件密码验证 代码

几天前,我说过了,有一个朋友在做单页产品推广。今天又想再搞一个PHP单页文件,需要输入“密码”才可以访问,具体的要求如下:

我想要的结果是,打开页面提示输入密码,密码框要垂直居中,水平居中。密码正确则继续执行单文件PHP或跳转某个页面。如果密码错误,提示错误的同时要求再次输入密码。

 

PHP单文件验证有两种方法

 

1、php auth验证:$_SERVER['PHP_AUTH_USER']、$_SERVER['PHP_AUTH_PW'];

具体可以参考:https://www.php.net/manual/zh/features.http-auth.php

 

2、$_COOKIE、$_SESSION

 

由于我的这位朋友要求是:

1、密码框要垂直居中,水平居中。

2、只要密码,不需要用户名。

 

因此:

我就只能选择:利用$_COOKIE 或 $_SESSION + html表单 来实现了。

 

我的思路如下:

如果密码正确,就生成一个有效的session值,这个值会随着设置的密码改变而改变。如果不正确,重新再次输入密码并验证。

当然,我们需要先判断session值是否正确?如果不正确,就要销毁session,重新再次输入密码并验证。

 

PHP单文件“用户名/密码”验证 代码

下面我所分享的PHP单文件验证方法,不仅仅只能是“密码验证”,还能是“用户名验证”、“用户名+密码验证”.......等等,原理都是相通的,无非是多加几个表单字段而已。

 

pwd.php

里面的html代码我是用的 bootstrap4 写的。

<?php
$pwd='www.fujieace.com'; //设置密码
$salt = 'r484TgKtHBEN9jAK';//密码用的盐

session_start();
if(isset($_SESSION['password'])){
    $password = $_SESSION['password'];
    if( $password === $pwd_md5 = md5($pwd.$salt)){
        echo '可以打开此单页面了!';
        echo "<script>alert('欢迎回来!正在跳转中......');location.href='https://www.fujieace.com/'</script>";//跳到指定页面
        return;
    }else{
        session_unset();
        session_destroy(); //删除session所有资源,包括session存储文件
        // 如果$_SESSION['password']存在,但是密码值又不相符合,说明 设置的密码 可能改变了,因此,必须要先销毁session
        $formcontrol = 'is-invalid';
    }
}else{
    if(isset($_POST['password'])){
        $password =  $_POST['password']; //得到前台输入后的密码
        $password_md5 = md5($password.$salt);  //前台加密码后的密码字符串
        $pwd_md5 = md5($pwd.$salt);   //用md5加密后再对比,只是为了简单防止绕过
        if($password_md5 === $pwd_md5){
            $_SESSION['password'] = $pwd_md5;  //设置的密码改变了,session值也会自动改变。我就不设置session失效时间了,用默认的失效时间就可以了!
            echo '可以打开此单页面了!';
            echo "<script>alert('恭喜你!密码正确!正在跳转中......');location.href='https://www.fujieace.com/'</script>";//跳到指定页面
            return;
        }else{
            $formcontrol = 'is-invalid';
        }
    }else{
        $formcontrol = '';
    }
}
?>

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <title>需要密码才可访问!</title>
    <meta name="description" content="" />
    <meta name="keywords" content="" />

    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

    <!-- 新 Bootstrap4 核心 CSS 文件 -->
    <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/css/bootstrap.min.css">

    <!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
    <script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>

    <!-- bootstrap.bundle.min.js 用于弹窗、提示、下拉菜单,包含了 popper.min.js -->
    <script src="https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js"></script>

    <!-- 最新的 Bootstrap4 核心 JavaScript 文件 -->
    <script src="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-sm-4"></div>
        <div class="col-sm-4">
            <form method="post" action="">
                   <div class="form-group" style=" border:1px dotted; padding: 12px;margin-top:61.8%">
                    <label for="exampleInputPassword1">密码:</label>
                    <input type="password" name="password" class="form-control <?php echo $formcontrol; ?>" id="exampleInputPassword1" required="required" placeholder="请输入密码!">
                       <p></p>
                       <button type="submit" class="btn btn-primary">提交</button>
                </div>

            </form>
        </div>
        <div class="col-sm-4"></div>

    </div>

</div>
</body>
</html>

 

最后效果:

PHP单文件密码验证

 

PHP单文件密码验证错误

 

总结:

我给我的朋友建议的是:要考虑PC端、移动端等各设备之间的兼容性,还有就是用户体验性,我并没有完全的垂直居中。我设置的是黄金分割线值:0.618,也就是61.8%。

    A+
发布日期:2020年10月13日 20:11:59  所属分类:PHP
最后更新时间:2020-10-14 13:14:23
付杰
  • ¥ 98.0元
  • 市场价:198.0元
  • ¥ 199.0元
  • 市场价:299.0元
  • ¥ 298.0元
  • 市场价:498.0元
  • ¥ 298.0元
  • 市场价:398.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: