2012-04-04 4 views
5

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

LOGOUT PAGE:

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

Благодаря

+0

вы не можете сделать это с помощью PHP, вы должны сделать это с помощью JS – Michal

+3

«предыдущая» страница будет по-прежнему находиться в кеше браузера. Если вы хотите запретить операции «назад» на страницу, требующую активного входа, вам придется сделать их недоступными. –

+0

, что делает их несовместимыми, не помешает браузеру хранить их в истории ... imo – Michal

ответ

2

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

-3

добавьте это в свой код, чтобы предотвратить нажатие кнопки пользователя.

 ignore_user_abort(true); 
+0

Нет, это не будет ... 'ignore_user_abort()' устанавливает, отключается ли клиент, чтобы сценарий был прерван. – Michal

1

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

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

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(); 
} 

Благодарности

:)

2

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

Какое исправление?

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

Статические содержимое (CSS/JavaScript/фото): read this

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

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

0

Вот одно простое и быстрое решение. В тег формы входа добавьте target = "_ blank", который отображает содержимое в другом окне. Затем после выхода из системы просто закройте это окно и проблема с кнопкой «Назад» (браузер 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

Смежные вопросы