5

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

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

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

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

Спасибо

  • Error: User Rate Limit Exceededignore_user_abort()Error: User Rate Limit Exceeded

    от
  • Не выполняйте манипуляцию сеансом при получении запросов, особенно при входе и выходе из системы. Вместо этого используйте POST, я думаю, что drupal делает то же самое с post.

    от hakre
  • «Предыдущий» страница все еще будет в кеше браузера. Если вы хотите предотвратить & quot; назад & apos; Операции со страницей, требующей активного входа в систему, должны быть недоступны для кэширования.

    от Marc B
  • сделав их не кэшируемыми, браузер не сохранит их в истории ... imo

    от Michal
  • Вы не можете сделать это с PHP, вы должны сделать это с JS

    от Michal
7 ответов
  • 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

  • -3

    добавьте это к своему коду

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

         ignore_user_abort(true);
    

  • 2

    Я думаю

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

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

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

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

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

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

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

    Спасибо

    :)

  • 0

    Вот одно простое и быстрое решение. К тегу формы входа добавьте target

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

  • 1

    По сути

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

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

  • 2

    Код правильный. На самом деле вам не нужно запрещать людям нажимать кн

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