Сеанс PHP приводит к тому, что каждая страница содержит заголовок cache-control: no-store, no-cache, must-revalidate
.
Мне нужно переопределить это поведение и изменить его на Cache-Control: s-maxage=10, public, max-age=10
или даже просто cache-control: public, max-age=10
.
Я пытался использовать переменные сеанса session_cache_limiter('public');
и session_cache_expire(1);
, но значение срока действия указано в минутах, и я не могу понять, как установить его на 10 секунд.
Как установить session_cache_expire(1);
на 10 секунд?
Если это невозможно, как еще я могу переопределить заголовок сеанса и установить управление кешем на 10 секунд?
@CBroe, короткое время кеша предназначено для динамического контента. Отсутствие кэша работает хорошо, но я хотел бы увеличить время до 10 секунд, чтобы оно соответствовало времени кэширования некоторых моих функций (которые используют Redis).
В PHP вы используете функцию header():
<?php
header("Cache-control: public, max-age=10");
header("Expires: Sat, 1 Apr 2022 05:00:00 GMT");
?>
Альтернативный вариант — использовать теги HTML сверху — перед первым открытием <?php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "en" lang = "en">
<head>
<meta http-equiv = "Cache-control" content = "max-age=10" />
<meta http-equiv = "Expires" content = "Sat, 1 Apr 2022 05:00:00 GMT" />
</head>
<?php
// your php code starts here.
Если вы используете какой-либо интерфейсный фреймворк, у которого есть свои шаблоны, вы должны искать метатеги там или, возможно, в документации этого фреймворка (возможно, для этого есть специальные функции).
С помощью @ Amikot40 и @CBroe я решил проблему.
// remove pragma no-cache header with session variable
// this also sets the Cache-Control header, but you will change that after session start
session_cache_limiter('public');
session_start();
// cache for 10 seconds
header("Cache-Control: s-maxage=10, public, max-age=10");
// expire in 10 seconds
$expire_time = new DateTime('UTC');
$expire_time->add(new DateInterval('PT10S')); // add 10 seconds
$expire_time = $expire_time->format(DateTimeInterface::RFC7231);
header("Expires: $expire_time");
Не уверен, в чем смысл такого чрезвычайно короткого интервала кэширования, но я думаю, вы могли бы просто использовать
header
послеsession_start
, чтобы перезаписать сгенерированный системой заголовок своим собственным.