Я запускаю сайт, и время от времени пользователи связываются со мной, потому что они либо не могут войти в систему, либо могут войти, но имеют проблемы с отправкой форм (формы находятся на защищенных страницах, используя сеансы PHP). До сих пор я был в состоянии сказать пользователям просто переключать браузеры, и проблема прояснилась: я подумал, что это какая-то проблема с браузером, так как не каждый пользователь имел эту проблему. Кроме того, все проблемные пользователи использовали IE. Затем я подумал, что, возможно, это была проблема, специфичная для IE, пока у нового пользователя не возникла та же проблема с Chrome / Firefox (я вошел в учетную запись пользователя на 2 разных машинах и не смог воспроизвести проблему Chrome / Firefox).
После некоторых копаний я сейчас считать проблема может быть связана с сеансом. Этот сайт Говорит, что:
Старые файлы кэша и файлы cookie также необходимо очистить перед посещением защищенных областей, таких как платежный портал или корзина покупок. «Session expired» — это обычное уведомление, если старый кеш браузера и файлы cookie не были уничтожены.
После некоторого дальнейшего изучения Stackoverflow я нашел сообщество вики начал @BalusC, сказав, что правильным способом избежать кэширования страницы через php будет использование:
header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1.
header('Pragma: no-cache'); // HTTP 1.0.
header('Expires: 0'); // Proxies.
Учитывая вышесказанное, у меня есть пара вопросов:
Спасибо!
РЕДАКТИРОВАТЬ:
Моя страница входа выглядит следующим образом:
<div id="login_form">
<form id="login" method="post">
<?php $login_problem = FALSE;
if (isset($_POST['signin']) && $failed) {
$login_problem = TRUE;
$login_error_result ='<a href="/admin/forgotten.php">Forget something?</a>';
}
?>
<table>
<tr>
<td>
<label for="username">Username:</label>
<input name="username" id="username" type="text" maxlength="15" />
</td>
<td colspan="2"><label for="password">Password: <?php if ($login_problem) {
echo $login_error_result;}?></label>
<input type="password" id="password" name="password" maxlength="15"/>
</td>
<td id="login_submit" >
<input type="submit" name="signin" class="submit" value="Sign in!" />
</td>
</tr>
</table>
</form>
</div>
Я также управляю веб-сайтом, который позволяет пользователям входить в систему и перемещаться по защищенным страницам. Лично я использую куки для процесса, но сессия PHP по сути является куки с именем phpsessid
, Вот заголовки PHP, которые я использую для предотвращения кеширования:
header("Cache-control: no-store, no-cache, must-revalidate");
header("Expires: Mon, 26 Jun 1997 05:00:00 GMT");
header("Pragma: no-cache");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
При написании якорных тегов для навигации по сайту я использую echo "$anchorTagLink?cacheBuster=" . time();
Это, по-видимому, эффективно предотвращает кеширование, потому что сама страница отправляет сообщение, в основном говоря: «Не кешируйте меня!» и каждая ссылка является новой уникальной ссылкой.
CloudFlare может влиять на кеширование, потому что они могут передавать обратно кешированную копию вашей страницы; однако, я считаю, что это можно изменить в настройках CloudFlare (хотя я не уверен на 100%).
РЕДАКТИРОВАТЬ:
Вот некоторые подробности о PHP Cache Control:
http://css-tricks.com/snippets/php/intelligent-php-cache-control/
Я думаю, что это также может быть проблема с JavaScript, иногда Javascript может быть отключен в Chrome или IE. Вы можете попробовать отключить JavaScript и посмотреть, что произойдет. Вы можете добавить NO-CACHE только на странице входа. Хотя я проверил NO_Cache, и это не всегда работает.
У вас на странице входа есть проверка JavaScript или php?