基于JSON文件的PHP登录:如何用Session限制URL直接访问
这个问题很典型——前端验证虽然方便,但完全拦不住懂点技术的人绕开直接访问。要解决这个,我们得把服务器端的Session验证加上,让服务器来把控谁能访问受保护的页面。下面是具体的改造步骤:
1. 重构登录验证逻辑(把验证移到PHP端)
原来前端直接读取login.json验证的做法其实不安全(任何人都能下载你的用户列表),所以我们把验证逻辑放到PHP文件里,前端只负责提交账号密码。
修改前端JavaScript代码
把原来请求login.json的代码改成请求PHP处理脚本,比如login_process.php:
$(document).ready(function () { $('#login').click(function () { var email = $('#email').val(); var pass = $('#pass').val(); // 先做简单的非空校验 if (!email || !pass) { alert('请输入邮箱和密码!'); return false; } $.ajax({ type: "POST", url: "login_process.php", // 改成PHP处理文件 data: {email: email, pass: pass}, // 提交账号密码 dataType: "json", success: function (response) { if (response.success) { // 验证成功,跳转到主页 document.location = "index.php"; } else { // 验证失败,清空输入框并提示 $('#email').val(''); $('#pass').val(''); alert('请检查你的邮箱或密码!'); } }, error: function() { alert('服务器出错,请稍后重试!'); } }); return false; }); });
2. 创建PHP登录处理脚本
login_process.php 这个文件负责读取json用户数据、验证账号密码,并且创建Session标记用户已登录:
<?php // 开启Session session_start(); // 接收前端提交的数据 $email = $_POST['email'] ?? ''; $pass = $_POST['pass'] ?? ''; // 读取并解析JSON用户文件 $users = json_decode(file_get_contents('login.json'), true); $is_valid = false; // 遍历用户列表验证 foreach ($users as $user) { if ($user['email'] === $email && $user['pass'] === $pass) { $is_valid = true; break; } } if ($is_valid) { // 验证成功,设置Session变量 $_SESSION['logged_in'] = true; $_SESSION['user_email'] = $email; // 返回成功结果 echo json_encode(['success' => true]); } else { // 验证失败,返回失败结果 echo json_encode(['success' => false]); } ?>
3. 保护受限制页面(比如
index.php) 在所有需要登录才能访问的页面顶部,加上Session检查逻辑,如果用户未登录就强制跳转到登录页:
<?php session_start(); // 检查是否已登录 if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) { // 未登录,重定向到登录页面(假设登录页是login.html) header('Location: login.html'); exit; } // 下面是原来的index.php内容 ?> <!DOCTYPE html> <html> <head> <title>主页</title> </head> <body> <h1>欢迎回来,<?php echo $_SESSION['user_email']; ?>!</h1> <a href="logout.php">退出登录</a> </body> </html>
4. 添加退出登录功能(可选但推荐)
创建logout.php来销毁Session,让用户安全退出:
<?php session_start(); // 销毁所有Session变量 $_SESSION = array(); // 销毁Session cookie if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time() - 42000, '/'); } // 销毁Session session_destroy(); // 重定向到登录页 header('Location: login.html'); exit; ?>
额外注意事项
- 确保你的
login.json文件权限设置正确,不要让外部直接访问(比如在Apache的.htaccess里添加规则禁止访问,或者把json文件放到网站根目录以外的位置)。 - 不要在前端暴露任何敏感信息,所有验证逻辑都要放在服务器端。
- 密码建议不要明文存储在json里,最好用哈希算法(比如
password_hash())加密后存储,验证时用password_verify()校验,这样更安全。
内容的提问来源于stack exchange,提问作者MJ DEV
相关产品推荐
相关产品推荐

