кэширование — запретить пользователю доступ к предыдущим (ограниченным) страницам после выхода из системы с переполнением стека

Когда пользователь решает выйти, он, очевидно, делает это, используя кнопку «Выйти».
Когда они это делают, этот скрипт выполняется:

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>

Это помогло?

0

Решение

Все страницы, требующие входа, должны иметь что-то вроде этого,

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
1

Другие решения

Я думаю, что на каждой странице вы можете просто проверить, установлена ​​ли сессия или нет. ех. Session::handlelogin('user')

тогда вы можете просто сделать функцию, а именно handlelogin в классе Session

Class Session {

function handlelogin($user) {
if (!isset($user)) {
//redirect the user to your login page
}
}

}

Примечание: просто установите это в верхней части страницы, если вы используете архитектуру MVC, то вы можете установить это в контроллере

Session::handlelogin('user')

0