php实现网页登录权限
使用Session实现登录验证
在PHP中,Session是一种常用的用户身份验证机制。通过session_start()函数初始化会话,用户登录成功后存储用户信息在$_SESSION超全局变量中。
<?php
session_start();
// 模拟用户验证(实际应从数据库查询)
if ($_POST['username'] === 'admin' && $_POST['password'] === '123456') {
$_SESSION['user'] = [
'username' => $_POST['username'],
'login_time' => time()
];
header('Location: dashboard.php');
} else {
echo "Invalid credentials";
}
数据库用户验证
实际项目中通常需要查询数据库验证用户。使用预处理语句防止SQL注入。

$pdo = new PDO('mysql:host=localhost;dbname=test', 'dbuser', 'dbpass');
$stmt = $pdo->prepare("SELECT id, password FROM users WHERE username = ?");
$stmt->execute([$_POST['username']]);
$user = $stmt->fetch();
if ($user && password_verify($_POST['password'], $user['password'])) {
$_SESSION['user_id'] = $user['id'];
// 其他登录成功逻辑
}
密码安全处理
使用password_hash()创建安全密码哈希,password_verify()进行验证。
// 注册时哈希密码
$hashedPassword = password_hash($plainPassword, PASSWORD_DEFAULT);
// 登录时验证
if (password_verify($inputPassword, $storedHash)) {
// 验证通过
}
权限控制中间件
创建可重用的权限检查函数,在需要保护的页面顶部调用。

function checkAuth() {
if (!isset($_SESSION['user_id'])) {
header('HTTP/1.1 403 Forbidden');
exit('Access denied');
}
}
// 在受保护页面调用
checkAuth();
记住登录状态
通过Cookie实现"记住我"功能,设置长期有效的认证token。
if ($rememberMe) {
$token = bin2hex(random_bytes(32));
setcookie('remember_token', $token, time() + 86400 * 30, '/');
// 将token存入数据库关联用户
}
安全增强措施
实施CSRF防护、登录尝试限制等安全措施提升系统安全性。
// 生成CSRF令牌
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
// 在表单中
<input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
// 验证时
if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die('CSRF validation failed');
}






