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
相关产品推荐
相关产品推荐

