У меня возникают проблемы с 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>'; } }
Я не знаю, почему он так работает.
Пожалуйста, помогите мне узнать, где я совершаю ошибку.
Я хочу отключить эту кнопку браузера после выхода из системы.
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"); ?>
Вы должны сделать переадресацию со своего сценария выхода.
Например:
header("Location: index.php");
Вы, если пользователь в следующий раз ударит, снова перейдут на страницу logout.php, где вы снова можете выполнить проверку и перенаправить снова 🙂 Это бесконечный цикл, если пользователь снова пытается.
Это связано с тем, что кеш браузера хранит данные на странице, если вы обновите страницу или перемещаетесь дальше в своей частной области, вам будет предложено ввести страницу входа в систему, и вы не сможете ничего увидеть, считая, что ваш логин система проверки правильно настроена.
В противном случае вы можете заставить браузер не кэшировать страницу и получить новый запрос на сервер для этой страницы
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"); ?>
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");
Попробуйте этот код на всех страницах, кроме страницы входа в систему и страницы проверки входа.
session_start(); if (!$_SESSION['sesuname']) { echo "You are not logged in."; exit(); } else { /* All other codes must be here */ }