PHP session 发送 header "Cache-Control: no-store, no-cache, must-revalidate"。如何更改为 "Cache-Control: s-maxage=10, public, max-age=10"

PHP session sending header "Cache-Control: no-store, no-cache, must-revalidate". How to change to "Cache-Control: s-maxage=10, public, max-age=10"

PHP session 导致每个页面包含 header cache-control: no-store, no-cache, must-revalidate.

我需要覆盖此行为并将其更改为 Cache-Control: s-maxage=10, public, max-age=10 甚至只是 cache-control: public, max-age=10.

我尝试使用 session 变量 session_cache_limiter('public');session_cache_expire(1); 但是,过期值以分钟为单位,我不知道如何将它设置为 10 秒。

如何将 session_cache_expire(1); 设置为 10 秒? 如果那不可能,我还能如何覆盖 session header 并将缓存控制设置为 10 秒?

在 PHP 中使用 header() 函数:

<?php
  header("Cache-control: public, max-age=10");
  header("Expires: Sat, 1 Apr 2022 05:00:00 GMT");
?>

另一种选择是在顶部使用 HTML 标签 - 在第一个

<!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");