我刚刚编写了一个PHP登录脚本,我想要完成的是当用户点击退出链接时,在他们注销后,无论点击浏览器的后退按钮,他们都无法访问该页面。
这是退出功能:
//Start the Session
session_start();
session_destroy();
header("location:login.php");
exit();
我确实在所有页面上放置了以下代码,这似乎没有完成任务:
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header ("Pragma: no-cache");
//Start the Session
session_start();
有什么建议吗?
答案 0 :(得分:8)
您无法控制服务器上客户端后退按钮的工作方式。您可以使用客户端上的javascript销毁历史数据。
客户端可以完全忽略no-cache标头。
答案 1 :(得分:2)
如果没有登录$ _SESSION,只需重定向,例如:
//on your protected pages
session_start();
if(!$_SESSION['logged']) {
header("location:login.php");
}
这是我的退出操作:
session_start();
// Unset all of the session variables.
$_SESSION = array();
// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
}
// Finally, destroy the session.
session_destroy();
答案 2 :(得分:2)
如果仍然使用正确的值设置会话全局,请检查用户何时注销。
print_r($_SESSION);
这样做的原因是你正在做一个session_destroy,然后是一个头重定向,结果就是你强制重定向,并且会话的破坏不是那样写到服务器上的。
答案 3 :(得分:2)
我认为您需要在会话中存储内容,然后在每个页面加载时检查它。以下是我过去的做法
session_start()
// register necessary session variables
$_SESSION['username'] = $username;
session_start();
// destroy the session and check to make sure it has been destroyed
session_destroy();
if(!session_is_registered('username')){
$loginMessage = 'You have been logged out.';
include 'index.php';
exit();
}
// if we're still here, some bad juju happened
session_start()
// make sure user is logged in
if (!$_SESSION['username']) {
$loginError = "You are not logged in.";
include("index.php");
exit();
}
答案 4 :(得分:0)
我建议你使用HTTPS和SSL。您可以关闭SSL会话并将用户踢回非加密页面。
大多数浏览器以不同方式实现缓存方案。
例如,在Opera中,您可以单击“返回”,它将直接从内存中提取页面数据,而不会向服务器发送任何数据,即使页面已过期也是如此。如果点击“刷新”,当然,您的服务器需要登录。
在Internet Explorer中,处理方式非常不同,表单数据会重新提交给服务器。
答案 5 :(得分:0)
可能是您的 session_destroy()函数。试试这个:
unset($_SESSION);
取消设置 $ _ SESSION 变量将清除此处存储的所有内容。
答案 6 :(得分:0)
$_SESSION['blah'] = '';
这也有效..
答案 7 :(得分:0)
<?
session_start();
if (!isset($_SESSION['username']) && !isset($_SESSION['password'])) {
header('Location:../index.php');
exit;
} else {
session_destroy();
}
?>
这确实对我有帮助..将其粘贴到每个页面或您注销
的页面中<?php
session_start();
session_unset();
session_destroy();
header("Location:../index.php");
exit;
就像破坏你的会话一样简单