示例地址:https://10.1pxeye.com/docs/session-password.php
测试密码:123456

源码
<?php
// 定义真实密码
$real_password = '123456';

// 启动会话管理
session_start();

// 获取提交的操作类型
$action = $_POST['action'] ?? null;
if ($action == 'signout') {
    // 如果用户请求退出登录,则销毁会话并重定向到当前页面
    session_destroy();
    header('Location: ' . $_SERVER['PHP_SELF']);
    exit;
}

// 获取用户提交的密码以及存储在会话中的密码哈希值
$password_user_entered = $_POST['password'] ?? null;
$session_password = $_SESSION['password'] ?? null;

// 关闭会话的写入,确保数据在处理后锁定
session_write_close();

// 如果没有输入密码并且没有会话中的密码(即用户未登录且未提交密码),则显示登录表单
if (!$password_user_entered && !$session_password) {
    ?>
    <p>请输入密码</p>
    <form action="" method="post">
        <input type="password" name="password">
        <input type="submit" value="登录">
    </form>
    <?php
    die(); // 终止脚本,等待用户输入密码
}

// 如果用户输入的密码正确(直接比较)或会话中的密码哈希值验证成功,则显示“已登录”状态
if ($password_user_entered == $real_password || password_verify($real_password, $session_password)) {
    ?>
    <p>您已登录</p>
    <form action="" method="post">
        <input type="hidden" name="action" value="signout">
        <button type="submit">退出</button>
    </form>
    <?php

    // 如果会话中没有存储密码哈希值,则进行密码哈希处理并存储到会话
    if (!$session_password) {
        session_start(); // 重新启动会话
        $password_hashed = password_hash($real_password, PASSWORD_DEFAULT); // 对密码进行哈希加密
        $_SESSION['password'] = $password_hashed; // 将加密后的密码存入会话
        session_regenerate_id(true); // 重新生成会话 ID 以防止会话固定攻击
        session_write_close(); // 关闭会话写入
    }
} else {
    // 如果密码错误,显示错误提示并再次显示登录表单
    ?>
    <p style="color:red">密码错误</p>
    <p>请输入密码</p>
    <form action="" method="post">
        <input type="password" name="password">
        <input type="submit" value="登录">
    </form>
    <?php
}