Вопрос по php, session, redirect, mysql – кнопка «назад» после выхода из системы

5

У меня есть страница выхода php. когда пользователь нажимает на ссылку выхода из системы. Посмотрите эту страницу и перенаправьте на страницу индекса. но когда я нажимаю кнопку «назад», я вижу предыдущую страницу с пользовательскими данными. конечно, когда я обновляю страницу, я не вижу предыдущую страницу и данные. Я проверил другой код (drupal) после выхода из системы и нажатия кнопки «Назад». Я не вижу предыдущую страницу и страницу входа. Где моя проблема как это исправить?

СТРАНИЦА ВЫХОДА:

<code>if (isset($_GET['req']) && $_GET['req'] == 'logout') {
      session_start();
      session_destroy();
      header("Location: index.php");
   exit();
}
</code>

Спасибо

«Предыдущий» страница все еще будет в кеше браузера. Если вы хотите предотвратить & quot; назад & apos; Операции со страницей, требующей активного входа в систему, должны быть недоступны для кэширования. Marc B
сделав их не кэшируемыми, браузер не сохранит их в истории ... imo Michal
Не выполняйте манипуляцию сеансом при получении запросов, особенно при входе и выходе из системы. Вместо этого используйте POST, я думаю, что drupal делает то же самое с post. hakre
Вы не можете сделать это с PHP, вы должны сделать это с JS Michal

Ваш Ответ

7   ответов
2

что это в основном проблема на стороне клиента и из-за заголовков кэша браузера.

что за починка?

На мой взгляд, вам нужно правильно установить заголовки кэша для статического и нестатического содержимого.

Статическое содержимое (css / javascript / images):прочитай это

Для самой страницы php:header("Cache-Control", "no-store, no-cache, must-revalidate");

должен сделать трюк

0

= & quot; _blank & quot; который отображает контент в другом окне. Затем после выхода из системы просто закройте это окно и проблема с кнопкой «Назад» (браузер Safari) будет решена. Даже попытка использовать историю не будет отображать страницу, а вместо этого перенаправит на страницу входа. Это хорошо для браузеров Safari, но для других, таких как Firefox, session_destroy (); заботится об этом.

0
<?
session_start();
if(!isset($_SESSION['username']) && !isset($_SESSION['password'])){
header("Location:../index.php");
exit;
}
else{
session_destroy();
}
?>

<?php
session_start();
session_unset();
session_destroy();
header("Location:../index.php");
exit;

user_logout.php

1

вы спрашиваете, как очистить историю браузера пользователя и кэш страницы, к которой он имел доступ, но больше не делает. Когда вы выходите из системы, вы удаляете его возможность повторно загружать страницу, и вы можете сделать очень мало (если вообще что-то), которое может помешать браузеру показать им то, что ему было разрешено загрузить ( это устаревшие данные). Важным моментом является то, что когда они перезагружаются, они не получают новые данные - вы не можете стереть кэш для того, что они уже загрузили.

Edit: Также захотелось добавить что-нибудь после прочтения других комментариев: вы можете сказать браузеру не кэшировать какие-либо данные, что потребует от них перезагрузки ВСЁ, даже когда они нажимают кнопку «назад», но вы также должны требовать от них перезагрузки всего даже когда они аутентифицированы - с этим вам придется смириться. Очевидно, это зависит от конкретной ситуации, в которой находится ваш сайт, но в большинстве случаев я не думаю, что это было бы целесообразным компромиссом. Вашему хостингу потребовалась бы большая пропускная способность, потому что ресурсы загружались бы повторно при каждой загрузке страницы, загрузка страниц была бы более длительной, потому что браузеры не могли полагаться на свой локальный кэш, поэтому ваше приложение, естественно, показалось бы медленнее пользователям. До тех пор, пока не является абсолютно необходимым, чтобы данные не просматривались, если они не вошли в систему, я бы просто нашел вежливый и ненавязчивый способ сказать своим пользователям выйти из системы и закрыть окно браузера, чтобы уменьшить вероятность любопытных глаз, видя данные, которые они не должны.

-3

и пользователь не сможет нажать кнопку назад.

     ignore_user_abort(true);
Error: User Rate Limit Exceededignore_user_abort()Error: User Rate Limit Exceeded
2

опку «назад». Если вы действительно считаете это важным, вы можете сохранить cookie или что-то еще в logout.php, и главная страница проверит с AJAX, установлен ли этот cookie. И если это так, вы можете перезагрузить страницу с помощью JS (и, конечно, тогда удалить куки). Но действительно безопасного способа не существует.

0

$_GET но не проверяя ничего$_SESSION

Попробуй это

session_start ();
if (isset ( $_GET ['req'] ) && $_GET ['req'] == 'logout') {
    $_SESSION ['auth'] = false ;
    session_destroy ();
}

if (! isset ( $_SESSION ['auth'] ) || $_SESSION ['auth'] == false) {
    header ( "Location: index.php" );
    exit ();
}

Убедитесь, что на главных страницах у вас есть что-то вроде этого

session_start ();

if(/** login Condition **/)
{
    $_SESSION ['auth'] = true ;
}

if (! isset ( $_SESSION ['auth'] ) || $_SESSION ['auth'] == false) {
    header ( "Location: index.php" );
    exit ();
}

Спасибо

:)

Похожие вопросы