You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP退出登录后点击返回按钮仍显示原页面的问题求助

解决退出登录后点击返回仍能看到原页面的问题

嘿,这个问题我碰到过好多次啦,主要是浏览器缓存机制加上缺少页面登录状态验证共同导致的,咱们一步一步来解决:

1. 给需要登录的页面添加强制登录验证

你现在的create_journal.php没有做任何登录状态检查,就算session销毁了,用户通过浏览器缓存还是能直接看到页面内容。所以必须在这个页面的最顶部添加session验证逻辑:

修改后的create_journal.php:

<?php
session_start();
// 检查用户是否已登录,未登录则跳转至登录页
if (!isset($_SESSION['username'])) {
    header("Location: index.php");
    exit(); // 确保后续代码不会执行
}

// 禁用浏览器缓存的HTTP头
header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1标准
header("Pragma: no-cache"); // 兼容HTTP 1.0
header("Expires: 0"); // 告诉代理服务器不要缓存
?>
<!-- 以下是你原来的HTML内容 -->
<li><a href="logout.php" style="color:white;" onmouseover='this.style.color="#08367f"' onmouseout='this.style.color="white"'><span class="glyphicon glyphicon-log-out"></span> Logout</a></li>

2. 优化logout.php的销毁逻辑并禁用缓存

原来的logout.php只销毁了session,但没有清空session变量,也没有告诉浏览器不要缓存登录后的页面。修改后的代码:

<?php
session_start();
// 先清空所有session变量
$_SESSION = array();

// 如果使用了cookie存储session ID,也要清除cookie
if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), '', time() - 42000, '/');
}

// 销毁session
session_destroy();

// 禁用缓存,确保返回时浏览器不会读取缓存页面
header("Cache-Control: no-cache, no-store, must-revalidate");
header("Pragma: no-cache");
header("Expires: 0");

header("Location: index.php");
exit();
?>

为什么这样能解决问题?

  • 登录验证:每次用户访问create_journal.php时,服务器都会主动检查session是否存在。就算用户通过浏览器返回按钮尝试访问,服务器也会因为session不存在而跳转到登录页。
  • 禁用缓存:通过HTTP头告诉浏览器和代理服务器,不要缓存这个页面。这样用户点击返回时,浏览器会重新向服务器请求页面,而不是直接读取本地缓存,这时候登录验证逻辑就会生效。

额外的安全提示(重要!)

你的func.php里存在严重的SQL注入风险,直接把用户输入的$username和$password拼到SQL语句里是非常危险的。建议改用mysqli的预处理语句,示例如下:

修改后的func.php登录逻辑:

<?php
session_start();
$con = mysqli_connect("localhost", "root", "", "forestdb");

if (isset($_POST['login_submit'])) {
    $username = $_POST['uname'];
    $password = $_POST['psw'];

    // 使用预处理语句防止SQL注入
    $stmt = mysqli_prepare($con, "SELECT * FROM login WHERE username = ? AND password = ?");
    mysqli_stmt_bind_param($stmt, "ss", $username, $password);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);

    if (mysqli_num_rows($result) == 1) {
        $_SESSION['username'] = $username; // 建议存储用户名而不是1,更实用
        header("Location: create_journal.php");
        exit();
    } else {
        echo "<script>alert('Enter Correct Details!!')</script>";
        echo "<script>window.open('index.php', '_self')</script>";
    }
}
?>

内容的提问来源于stack exchange,提问作者Sneha Roy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:22:25