2014-10-06 4 views
0

Мне нужно кэшировать страницу, только если задан определенный сеанс PHP.
Чтобы сделать это, я использую следующий код:Кэш, если условие выполнено

session_start(); 
if(isset($_SESSION['bot'])){ 
$etagFile = md5_file(__FILE__); 
header("Expires: " . gmdate("D, d M Y H:i:s", time() + 31556926) . " GMT"); 
header("Etag: $etagFile"); 
header('Cache-Control: private'); 
die('You\'ve been banned.'); 
} 
echo 'Some content'; 

Проблема заключается в том, что, когда истекает срок сеанса, пользователь увидит «Некоторое содержимое», в то время как он должен видеть «Вы были запрещены» для год.
error_reporting(E_ALL); ничего не возвращает.
В чем может быть проблема?

+1

Использование '$ _SESSION' vars не будет работать очень эффективно, если боты решают просто выключить куки – sjagr

+0

@sjagr ты прав, не думал об этом. Сценарий для кэширования сообщения запускается, как только бот обнаруживается с помощью простого метода проверки, но я планировал кэшировать предупреждение для каждой страницы, которую бот пытается посетить. Похоже, мне придется найти другое решение. Спасибо, что указали на это :) – Stubborn

ответ

1

В коде отсутствует ошибка, но логическая ошибка. Как вы выполняете поведение «истечения срока действия сеанса»?

Когда вы используете сеанс PHP, вы в основном используете файлы cookie. Если пользователь удаляет файл cookie, или если вы закончите сеанс, уничтожив его, вы потеряете информацию о пользователе. Сеанс пропал со всеми переменными сеанса, и вам нужно как-то его воссоздать.

Я не могу сказать много, не зная, что вы хотите делать. Но для запрещения пользователя вам нужно использовать систему входа в систему.

UPDATE: кажется, вы пытаетесь запретить бота. Вы не должны использовать сеанс для этого. Лучше всего использовать IP-адрес и проверить заголовки запроса на идентификатор бота (в случае, если он вежливый бот идентифицирует себя)

+0

Спасибо за ваш ответ, я буду следовать вашему предложению :) – Stubborn

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