Intereting Posts
usort (): Массив был изменен функцией сравнения пользователей Используя Composer, можно ли распределять зависимости между несколькими проектами? Использует ли facebook комету или ajax для своих уведомлений? Как отсортировать многомерный массив с помощью определенного ключа? Как обращаться с выходом пользователя в браузере с несколькими вкладками? find_in_set в левом соединении в Laravel Ошибка: количество связанных переменных не совпадает с числом токенов Выпадающий выберите, чтобы изменить второй снимок, выберите автоматически Декодирование JSON в Twig Проблема с тегом "Файловая система" Создание нового PDF путем слияния PDF-документов с использованием TCPDF попытка отправить почту с помощью быстрой почты, gmail smtp, php Какова наилучшая практика установки атрибута html через PHP? Неопределенные переменные ошибки с MySQL API AtTask – добавление времени выключения

Остановка кнопки «Назад» при открытии защищенных страниц?

Я сталкиваюсь с (по-видимому, общей) проблемой с кешами браузера, а мои защищенные страницы доступны через кнопку «Назад» (после выхода пользователя из системы).

Вот мой logout.php

<?php // 1. Find the session session_start(); // 2. Unset all the session variables $_SESSION = array(); // 3. Destroy the session cookie if(isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } // 4. Destroy the session session_destroy(); redirect_to('index.php?logout=1'); ?> 

Это успешно выводит пользователей на IE7, IE8, Chrome и Firefox, но в Safari я могу нажать кнопку «Назад» (сразу после выхода из системы) и по-прежнему видеть защищенный контент. Если я обновляю защищенную страницу, она загружает меня на экран входа (как и должно быть.)

Вы можете попробовать это самостоятельно @ http://labs.inversepenguin.com (пользователь: stack & pass: overflow.)

Я пробовал использовать:

 <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Expires" CONTENT="-1"> 

… но это не имеет никакого эффекта. Может ли кто-нибудь предложить какие-либо советы? Я нашел эту статью в кешировании браузера, но мне еще нужно найти ответ в ней … хотя я нашел:

 <?php Header("Cache-Control: must-revalidate"); $offset = 60 * 60 * 24 * 3; $ExpStr = "Expires: " . gmdate("D, d MYH:i:s", time() + $offset) . " GMT"; Header($ExpStr); ?> 

… который также не решает «проблему». Хм.

Если вы можете использовать HTTPS, это в сочетании с заголовком Cache-control: no-cache отключит «кеш страницы» (термин WebKit для кэша в памяти / обратном кэше). Недостатком этого является то, что он будет отключен для всех безопасных просмотров страниц, а не только после выхода из системы. ( Источник , обратите внимание, что они работают над допуском исключений, стоит обратить внимание на это.)

Если вы можете зависеть от JavaScript, добавление обработчика события unload предотвратит «кеш страницы». Это имеет также преимущество, позволяя вам только разбить кеш, когда нажимается кнопка «выйти из системы» или ссылка, только затем прикрепляя обработчик события unload . ( Источник )

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

Это будет проблемой webkit / Safari. Это было задано ранее без окончательного ответа здесь – кнопка Safari Back не выполняет сеанс выхода из PHP

Взгляните на ссылки в ответе, я думаю, вы найдете свой ответ в событии Unload.

Часть проблемы заключается в том, что вы настраиваете заголовок Expires в будущем. Браузеры используют заголовок Expires в качестве индикатора того, как долго что-то должно оставаться в кеше. Попробуй это:

$ offset = 60 * 60 * 24 * 3;
$ ExpStr = "Истекает:". gmdate ("D, d MYH: i: s", time () – $ offset). " ВРЕМЯ ПО ГРИНВИЧУ";
Заголовок ($ ExpStr);

В прошлом он установил заголовок expires и заставил браузер повторно запрашивать страницу каждый раз.