实现登录php
创建登录表单
在HTML中创建一个表单,包含用户名和密码输入框。表单的action属性指向处理登录的PHP文件,method设置为POST。
<form action="login.php" method="POST">
<label for="username">用户名:</label>
<input type="text" id="username" name="username" required>
<label for="password">密码:</label>
<input type="password" id="password" name="password" required>
<button type="submit">登录</button>
</form>
处理登录逻辑
创建一个名为login.php的文件,用于验证用户提交的凭据。通常需要连接数据库查询用户信息。
<?php
session_start();
$host = 'localhost';
$dbname = 'your_database';
$username = 'your_db_username';
$password = 'your_db_password';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$user = $_POST['username'];
$pass = $_POST['password'];
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->bindParam(':username', $user);
$stmt->execute();
if ($stmt->rowCount() > 0) {
$row = $stmt->fetch();
if (password_verify($pass, $row['password'])) {
$_SESSION['user_id'] = $row['id'];
$_SESSION['username'] = $row['username'];
header("Location: dashboard.php");
exit();
} else {
echo "密码错误";
}
} else {
echo "用户不存在";
}
} catch(PDOException $e) {
echo "数据库错误: " . $e->getMessage();
}
?>
密码安全存储
在注册时使用password_hash()函数对密码进行哈希处理,确保安全存储。
$hashed_password = password_hash($plain_password, PASSWORD_DEFAULT);
会话管理
登录成功后使用$_SESSION存储用户信息,在其他页面通过session_start()检查登录状态。
<?php
session_start();
if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit();
}
?>
安全增强措施
添加CSRF防护和输入验证,防止SQL注入和跨站脚本攻击。
// CSRF令牌生成和验证
if (empty($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("CSRF验证失败");
}
// 输入过滤
$user = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
错误处理
提供友好的错误提示,避免暴露系统信息。

try {
// 数据库操作
} catch (Exception $e) {
error_log($e->getMessage());
header("Location: error.php");
exit();
}






