上一篇
最新消息 📢(2025年08月更新):随着网络安全威胁升级,PHP 8.4已默认启用更严格的密码哈希算法,建议开发者使用password_hash()
配合PASSWORD_ARGON2ID
提升安全性!
无论是个人博客还是企业系统,用户认证都是核心功能,自己编写登录页面可以:
今天我们就用PHP+MySQL实现一个带基础安全防护的登录系统!
CREATE TABLE `users` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `username` VARCHAR(50) NOT NULL UNIQUE, `password` VARCHAR(255) NOT NULL, -- 存储哈希后的密码 `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 测试用户(密码:123456) INSERT INTO `users` (`username`, `password`) VALUES ('admin', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi');
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0">🔑 用户登录</title> <style> body { font-family: 'Arial', sans-serif; background: #f5f5f5; } .login-box { width: 300px; margin: 100px auto; padding: 20px; background: white; box-shadow: 0 0 10px rgba(0,0,0,0.1); } .input-group { margin-bottom: 15px; } input { width: 100%; padding: 8px; } button { background: #4CAF50; color: white; border: none; padding: 10px; width: 100%; cursor: pointer; } .error { color: red; } </style> </head> <body> <div class="login-box"> <h2>👋 欢迎登录</h2> <?php if(isset($_GET['error'])): ?> <p class="error">❌ 用户名或密码错误!</p> <?php endif; ?> <form action="auth.php" method="POST"> <div class="input-group"> <label>用户名:</label> <input type="text" name="username" required> </div> <div class="input-group"> <label>密码:</label> <input type="password" name="password" required> </div> <button type="submit">🚪 登录</button> </form> </div> </body> </html>
<?php session_start(); // 数据库配置 define('DB_HOST', 'localhost'); define('DB_USER', 'root'); define('DB_PASS', ''); define('DB_NAME', 'test_db'); // 过滤用户输入 $username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING); $password = $_POST['password']; try { $conn = new PDO( "mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASS ); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 查询用户 $stmt = $conn->prepare("SELECT * FROM users WHERE username = :username"); $stmt->bindParam(':username', $username); $stmt->execute(); if($stmt->rowCount() == 1) { $user = $stmt->fetch(PDO::FETCH_ASSOC); // 验证密码 if(password_verify($password, $user['password'])) { $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['username']; header("Location: dashboard.php"); // 登录成功跳转 exit(); } } // 认证失败 header("Location: login.php?error=1"); } catch(PDOException $e) { die("数据库错误: " . $e->getMessage()); } ?>
<?php session_start(); if(!isset($_SESSION['user_id'])) { header("Location: login.php"); exit(); } echo "🎉 欢迎, ".$_SESSION['username']."!"; echo "<p><a href='logout.php'>🚪 退出登录</a></p>"; ?>
<?php session_start(); session_destroy(); header("Location: login.php"); ?>
password_hash()
$hashed = password_hash($password, PASSWORD_ARGON2ID);
💡 小贴士:2025年起,PHP官方推荐使用mysqli
或PDO
替代旧的mysql_*
函数,它们已完全移除!
希望这个教程能帮你快速构建安全的登录系统!遇到问题欢迎在评论区交流~ ✨
本文由 邛承教 于2025-08-02发表在【云服务器提供商】,文中图片由(邛承教)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/512391.html
发表评论