我在session_destroy()
上遇到了麻烦。
当用户按Log out它必须破坏会话。我写了下面的代码:
Logout.php
<?php
session_start();
session_destroy();
header("location: LoginViewController.php");
?>
按注销后,当我按浏览器返回按钮时,它显示我以前登录的用户页面和会话用户名在Login.php page
login。
<?php
session_start();
$_SESSION['user']= $_GET['username'];
echo '"<div style="background:white; text-align:right"> Login as:'.$_SESSION['user'].'</div>"';
echo '<a href="Logout.php" style="text-align:right">Logout</a>';
LoginViewController.php
<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
$Username = $_POST['uname'];
$Password = $_POST['pwd'];
$User_Type=$_POST['type'];
If (!(empty($Username) && empty($Password) && empty($User_Type))){
$model = new UsersModel();
$rowsCount = $model->checkUser($Username,$Password,$User_Type);
if ($rowsCount!=0){
header("location:login.php?username=".$_POST['uname']."");
} else {
echo '<script type="text/javascript">alert("Enter username and password correctly");
window.location.href="LoginViewController.php";</script>';
}
}
我不知道为什么它是那样工作的。
请帮我找出我犯错误的地方。
我想在退出后禁用浏览器返回按钮
login.php page:
<?php
if (isset($_POST['uname'], $_POST['pwd'], $_POST['type'])) {
$Username = $_POST['uname'];
$Password = $_POST['pwd'];
$User_Type=$_POST['type'];
if (!(empty($Username) || empty($Password) || empty($User_Type)))
{
$model = new UsersModel();
$rowsCount = $model->checkUser($Username,$Password,$User_Type);
if ($rowsCount!=0)
{
$_SESSION['user'] = $Username;
header("Location:LoginViewController.php");
} else {
echo 'Bad user';
}
} else {
echo 'Please, fill all inputs';
}
} else {
echo 'Bad form sent';
}
?>
<form name="f1" method="POST" action="" >
// inputs
</form>
LoginViewController.php:
<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
if (!isset($_SESSION['user'])) {
header('Location: login.php');
exit();
}
echo 'You have successfully logged as '.$_SESSION['user']
?>
并添加标头以强制浏览器重新验证页面:
logout.php:
<?php
session_start();
session_destroy();
$_SESSION = array();
header("location: login.php");
?>
这是由于浏览器缓存在页面中保留详细信息,如果您刷新页面或在您的私人区域进一步移动,您将被提示登录页面,您将无法看到任何东西,假设您的登录检查系统配置正确。
你也可以强制浏览器不缓存这个页面,并为这个页面向服务器发出新的请求
header("Cache-Control: private, must-revalidate, max-age=0");
header("Pragma: no-cache");
header("Expires: Fri, 4 Jun 2010 12:00:00 GMT");
您应该从注销脚本执行重定向。
例如:header("Location: index.php");
如果用户下次点击,它将再次转到logout.php页面,在那里你可以再次执行检查并再次重定向:)如果用户再次尝试,这是一个无限循环
if (window.history) {
window.history.forward(1);
}
header("Cache-Control: private, must-revalidate, max-age=0");
header("Pragma: no-cache");
header("Expires: Fri, 4 Jun 2010 12:00:00 GMT");
这是我的LoginController.php
<?php
header("Cache-Control: private, must-revalidate, max-age=0");
header("Pragma: no-cache");
header("Expires: Fri, 4 Jun 2010 12:00:00 GMT");
//如果要提交表单,请将详细信息插入数据库
$Username = $_POST['uname'];
$Password = $_POST['pwd'];
$User_Type=$_POST['type'];
session_start();
If (!(empty($Username) && empty($Password) && empty($User_Type)))
{
$model = new UsersModel();
$rowsCount = $model->checkUser($Username,$Password,$User_Type);
if ($rowsCount!=0)
{
$_SESSION['user'] = $Username;
header("location:login.php");
} else
{
echo '<script type="text/javascript">alert("Enter username and password correctly");
window.location.href="LoginViewController.php";</script>';
}
}
}
?>
这是我的后登录页面(Login .php)..并显示会话用户名和注销链接
<?php
header("Cache-Control: private, must-revalidate, max-age=0");
header("Pragma: no-cache");
header("Expires: Fri, 4 Jun 2010 12:00:00 GMT");
session_start();
if(!isset($_SESSION['user']))
{
header('Location: LoginViewController.php');
exit();
}
echo '"<div style="background:white; text-align:right"> Login as:'.$_SESSION['user'].'
<a href="Logout.php" style="text-align:right">Logout</a></div>"';
?>
这是我Logout.php
<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
session_start();
session_destroy();
header("Location: LoginViewController.php");
?>
在除登录页和登录验证页以外的所有页面上尝试此代码。
session_start();
if (!$_SESSION['sesuname']) {
echo "You are not logged in.";
exit();
} else {
/* All other codes must be here */
}
这是我如何停止在Chrome备份:我使用这个函数:
function do_html_url($url) {
echo '
<html>
<body>
<script type="text/javascript">
window.location.replace("'; echo $url; echo '");
</script>
<noscript>Sorry, your browser does not support JavaScript</noscript>
</body>
</html>';
return;
}
然后,在index.php(我的网站的第一页)我设置一个开关为0;在"之前"中页面测试开关是否为零,如果不是,通过调用上面的函数do_html_url("index.php")将控制权返回给index.php。在"之后"页面,将开关设置为1,将导致"before"页,拒绝备份到该页的尝试。
的例子:
- 在我的第一页(index.php): $_SESSION['needoffersw']=0;
- In my later "before"页面:如果($ _SESSION [' needoffersw '] ! = 0) {do_html_url("index.php";}
- 在我的"后"page: if ($_SESSION['needoffersw']!=0;