Как отключить кнопку заднего браузера после того, как пользователь выйдет из системы и уничтожит сеанс?
У меня возникают проблемы с session_destroy()
.
Когда Пользователь нажимает Log out, он должен уничтожить сеанс. Я написал следующий код:
Logout.php
<?php
session_start();
session_destroy();
header("location: LoginViewController.php");
?>
После нажатия кнопки выхода из системы, когда я нажимаю кнопку "Назад в браузере", она показывает мою предыдущую пользовательскую страницу и имя пользователя сеанса на странице Login.php
login.php
<?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>';
}
}
Я не знаю, почему он так работает.
Пожалуйста, помогите мне узнать, где я совершаю ошибку.
Я хочу отключить эту кнопку назад после выхода из системы.
Ответы
Ответ 1
login.php страница:
<?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");
?>
Ответ 2
Вам нужно сделать переадресацию с вашего выхода script.
Например:
header("Location: index.php");
Вы, если пользователь в следующий раз ударит, снова перейдут на страницу logout.php, где вы снова можете выполнить проверку и перенаправить снова:) Это бесконечный цикл, если пользователь снова пытается выполнить.
Ответ 3
Это вызвано кешем браузера, который хранит данные на странице, если вы обновляете страницу или перемещаетесь дальше в своей частной области, вам будет предложено ввести страницу входа в систему, и вы не сможете ничего увидеть, предполагая что ваша система проверки входа правильно настроена.
В противном случае вы можете заставить браузер не кэшировать страницу и получить новый запрос на сервер для страницы
header("Cache-Control: private, must-revalidate, max-age=0");
header("Pragma: no-cache");
header("Expires: Fri, 4 Jun 2010 12:00:00 GMT");
Ответ 4
Вот мой 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");
?>
Ответ 5
if (window.history) {
window.history.forward(1);
}
Ответ 6
header("Cache-Control: private, must-revalidate, max-age=0");
header("Pragma: no-cache");
header("Expires: Fri, 4 Jun 2010 12:00:00 GMT");
Ответ 7
Попробуйте этот код на всех страницах, кроме страницы входа и страницы проверки входа.
session_start();
if (!$_SESSION['sesuname']) {
echo "You are not logged in.";
exit();
} else {
/* All other codes must be here */
}