Мне нужно кэшировать страницу, только если установлен определенный сеанс 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);
ничего не возвращает.
В чем может быть проблема?
В коде нет ошибки, но есть логический недостаток. Как вы реализуете поведение «истечения сеанса»?
Когда вы используете сеанс PHP, вы в основном используете куки. Если пользователь удаляет cookie или вы завершаете сеанс, уничтожая его, вы теряете учетную запись пользователя. Сеанс завершен со всеми переменными сеанса, и вам нужно как-то его воссоздать.
Я не могу сказать много, не зная, что ты хочешь сделать. Но для того, чтобы забанить пользователя, вам необходимо использовать систему авторизации.
ОБНОВЛЕНИЕ: кажется, вы пытаетесь забанить бота. Вы не должны использовать сессию для этого. Лучше всего использовать IP-адрес и проверять заголовки запроса идентификатора бота (в случае, если это вежливый бот, он идентифицирует себя)
Других решений пока нет …