Php 缓存动态页面的Http头

Php 缓存动态页面的Http头,php,http,header,cache-control,Php,Http,Header,Cache Control,我有一个用PHP生成的经典html页面 对于此页面(从同一URL提供),我们有两个案例: 用户已登录(基于cookie)=>页面特定于用户(我们显示一个包含用户名+个人信息的框) 用户未登录=>该页面对所有用户都是公用的 如何将标题设置为: 拥有最具攻击性的缓存(最大年龄为60岁) 避免在用户之间混合页面 我是否可以替换当前标题: header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: no-store

我有一个用PHP生成的经典html页面

对于此页面(从同一URL提供),我们有两个案例:

  • 用户已登录(基于cookie)=>页面特定于用户(我们显示一个包含用户名+个人信息的框)
  • 用户未登录=>该页面对所有用户都是公用的
  • 如何将标题设置为:

    • 拥有最具攻击性的缓存(最大年龄为60岁)
    • 避免在用户之间混合页面
    我是否可以替换当前标题:

    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
    
    用这个

    header('Cache-Control: public, max-age=60');
    header('Vary: *');
    

    编辑:是否可能(如何)在“1”情况下将其缓存控制为私有,在“2”情况下将其缓存控制为公共

    如果登录纯粹基于cookie,那么您只需要一个Vary:cookie头,以使其对特定用户唯一。不同的:*应该也能正常工作。

    小心!这并不是那么容易:IE不会缓存带有Vary头和任何字段的资源。如果不包含Vary头,则会出现安全问题。IE根本无法处理这种类型的设置的缓存,其中URL相同,但内容根据cookie的值(即用户是否登录)而变化。是的,但我认为尝试使用Vary解决这一问题是错误的方法(除了不太可能的情况,即您没有IE用户)。一个好的解决方案是根据不同的情况提供不同的报头:1)发送阻止缓存的报头,2)发送允许缓存的报头。在这两种情况下都不需要更改。您不能只更改发送的HTTP缓存头,否则中间代理会缓存登录的页面并将其返回给未经身份验证的用户(安全漏洞)。如果内容因cookie而异,则除了使用Vary:cookie外,您别无选择。任何其他解决问题的尝试都会留下安全漏洞。