php实现修改密码
PHP 实现修改密码功能
修改密码功能通常涉及用户身份验证、旧密码验证、新密码设置及数据库更新。以下是实现步骤:
数据库准备
确保用户表包含密码字段(如 password),通常存储加密后的密码。示例表结构:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL
);
密码修改表单
创建 HTML 表单让用户输入旧密码和新密码:
<form action="change_password.php" method="post">
<input type="password" name="old_password" placeholder="旧密码" required>
<input type="password" name="new_password" placeholder="新密码" required>
<input type="password" name="confirm_password" placeholder="确认新密码" required>
<button type="submit">修改密码</button>
</form>
处理修改逻辑
在 change_password.php 中处理密码修改请求:
<?php
session_start();
require 'db_connection.php'; // 数据库连接文件
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$old_password = $_POST['old_password'];
$new_password = $_POST['new_password'];
$confirm_password = $_POST['confirm_password'];
// 验证新密码是否一致
if ($new_password !== $confirm_password) {
die("新密码与确认密码不匹配");
}
// 获取当前用户信息(假设用户ID存储在session中)
$user_id = $_SESSION['user_id'];
$stmt = $pdo->prepare("SELECT password FROM users WHERE id = ?");
$stmt->execute([$user_id]);
$user = $stmt->fetch();
// 验证旧密码
if (!password_verify($old_password, $user['password'])) {
die("旧密码错误");
}
// 更新密码
$hashed_password = password_hash($new_password, PASSWORD_DEFAULT);
$update_stmt = $pdo->prepare("UPDATE users SET password = ? WHERE id = ?");
$update_stmt->execute([$hashed_password, $user_id]);
echo "密码修改成功";
}
?>
安全注意事项
- 密码哈希:始终使用
password_hash()和password_verify()处理密码。 - 输入验证:检查新密码长度和复杂度(如至少8位,包含字母和数字)。
- CSRF防护:添加 CSRF 令牌防止跨站请求伪造。
- HTTPS:确保表单通过 HTTPS 提交,避免密码明文传输。
完整示例扩展
如需增强安全性,可在表单中添加 CSRF 令牌:
// 生成令牌并存入session
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
表单中增加隐藏字段:
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
处理时验证令牌:
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("无效的CSRF令牌");
}






