Когда пользователь решает выйти, он, очевидно, делает это, используя кнопку «Выйти».
Когда они это делают, этот скрипт выполняется:
if(isset($_POST['submit_Logout'])){
$_SESSION['backend']->logout(); // see this function bellow
unset($_SESSION['user']); // unset only this session since there are other sessions I'd like to keep
session_regenerate_id(true); // makes sure the session id is updated, and the old one is discarded
KD::notice('success',$success_LoggedOut); // adding a notice to another session
KD::redirect('/'); // redirecting the user using header();
session_commit();
}
Я просто отключаю эту конкретную сессию (user
) поскольку существуют другие сеансы, в которых хранятся другие данные, независимо от того, вошел ли пользователь в систему или нет, для улучшения взаимодействия с пользователем.
logout()
-функция выглядит так — пока:
public function logout(){
$this->accessible=false; // just a flag to check against (see bellow)
$this->username=''; // empty the username
}
Так как я отменяю сеанс, который содержит связанные пользовательские данные, я просто понял, что эта функция, вероятно, не нужна. Также можно переместить неустановленную часть и т. Д. В функцию.
Во всяком случае, я пришел к выводу, что когда пользователь вышел из системы, он или она, или кто-то еще в этом отношении, имеет возможность просто нажать кнопку назад в своем браузере, и вуаля, они могут просматривать страницу (ы) ). Конечно, если они начнут нажимать на какие-либо ссылки, они будут выброшены. Но кнопка возврата все еще доступна ..
Я считаю, что это происходит в результате кеширования страниц / просмотров браузером. Поэтому, когда они нажимают кнопку «Назад», они видят кэшированную страницу / представление, сохраненное в памяти браузера или что-то в этом роде.
Поскольку эта страница или представление загружается в мой шаблон через страницу index.php с постоянным <head>
Я мало что могу сделать с кэшированием этих ограниченных страниц / просмотров. Или есть?
Удаление записей из истории браузеров не возможно? или предотвращение записи этих страниц в первую очередь?
Дело в том. Я считаю, что мне нужно заставить браузер всегда запрашивать страницу с сервера. Таким образом, независимо от того, нажимает ли пользователь кнопку «Назад» или ссылку на страницу с ограниченным доступом, страница всегда должна запрашивать ее с сервера, а не из памяти браузера.
Или я не понимаю это правильно?
Если так. Мне интересно, как. Как это обычно делается?
У меня есть это в моем классе
private $accessible = false; // when logged in, this is set to true
public function accessible(){
return $this->accessible;
}
В самой верхней части страницы, которая включает в себя представления в области ограниченного доступа, у меня есть это:
if($_SESSION['user']->accessible()===true):
В противном случае пользователю предлагается экран входа в систему.
Но это не работает, как ожидалось. Эта проверка не выполняется, когда пользователь использует кнопку назад в своем браузере …
Заранее спасибо..
ОБНОВИТЬ
Вот краткий обзор моей структуры / макета:
/*
when the user is logged in/out, the script that does that is executed up here.
That includes setting the sessions etc. aswell - which means, if the user is not logged in, the access will be set to false.
*/
<head>
</head>
<body>
/*
Here I include different pages with php include;
These pages can be home.pg.php, contact.pg.php, and of course restricted.pg.php
each of these pages includes different content (views as I like to call them) that is presented to the user based on their interaction.
Now. When the user tries to access the restricted.pg.php, I have this at the top:
*/
if($_SESSION['user']->accessible()===true):
/* now each view that is included here should be not accessable if accessable() is not true. */
else:
/* the user is presented with a login form */
endif;
</body>
Это помогло?
Все страницы, требующие входа, должны иметь что-то вроде этого,
session_start();
if(!isset($_SESSION['user']){
//REDIRECT USER TO LOGIN PAGE
}
Если из-за проблемы с кэшированием в браузере обратная реакция возвращает вас к кешированной версии страницы (даже если пользователь вышел из системы), тогда вам следует перенаправить пользователя дважды (хорошая практика).
я имею в виду создание файла с именем logout.php, поэтому, когда пользователь нажимает кнопку выхода, он перенаправляет пользователя на logout.php (который будет иметь код отмены сеанса), а после этого перенаправляет пользователя на страницу входа.
so current page ----redirects to---> logout.php ----redirects to----> login.php
Я думаю, что на каждой странице вы можете просто проверить, установлена ли сессия или нет. ех. Session::handlelogin('user')
тогда вы можете просто сделать функцию, а именно handlelogin в классе Session
Class Session {
function handlelogin($user) {
if (!isset($user)) {
//redirect the user to your login page
}
}
}
Примечание: просто установите это в верхней части страницы, если вы используете архитектуру MVC, то вы можете установить это в контроллере
Session::handlelogin('user')