示例地址: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
}
评论区
发表新的留言
您可以留言提出您的疑问或建议。
您的留言得到回复时,会通过您填写的邮箱提醒您。