PHP策略,允许代理仅在用户未登录时缓存页面

PHP策略,允许代理仅在用户未登录时缓存页面,php,browser-cache,cache-control,Php,Browser Cache,Cache Control,假设我有一个博客,因为有一些昂贵的PHP代码在后面运行,我希望它的页面可以通过HTTP头缓存(通过用户的浏览器或中间代理),只要用户没有登录就可以了,但是我希望当他登录时,缓存以某种方式被传递,以便他看到最新的内容 登录页面可能有一个“登录框”,因此当他有效登录时,“登录框”不会再次显示,相反,我想看到一条漂亮的消息“Hi UserX,当前时间是DD:MM:YYYY” 只要用户没有登录,整个页面就被认为是静态的,但是我希望在用户登录时将同一页面视为动态的。有什么简单的方法可以实现这一点吗?最简单

假设我有一个博客,因为有一些昂贵的PHP代码在后面运行,我希望它的页面可以通过HTTP头缓存(通过用户的浏览器或中间代理),只要用户没有登录就可以了,但是我希望当他登录时,缓存以某种方式被传递,以便他看到最新的内容

登录页面可能有一个“登录框”,因此当他有效登录时,“登录框”不会再次显示,相反,我想看到一条漂亮的消息“Hi UserX,当前时间是DD:MM:YYYY”


只要用户没有登录,整个页面就被认为是静态的,但是我希望在用户登录时将同一页面视为动态的。有什么简单的方法可以实现这一点吗?

最简单的方法是为登录用户创建一个不同的页面。一旦浏览器缓存了页面,实际上就不可能在设置的日期之前更新页面。但是,作为替代方案,您是否考虑过为静态页面提供服务并将标题设置为无缓存?包含该文件仍然需要php函数的开销,但您可以随意更新它。或者查看对象缓存。我已经使用Twig在服务器端进行了缓存。我想在客户端(和中间代理)也这样做,以减轻基于内容的服务的压力。因此,基本上我需要将表单action
index.php?logged=true
,这样我就可以再次访问同一个页面,但使用不同的链接。是的,但现在该页面已被缓存……您可以使用php更改标题,但如果您使用更高级别(即apache/nginx、htaccess)设置标题,则不能更改标题。相同的php脚本,如果使用
?logged=true
进行访问,它会将haders设置为不缓存,如果在没有该url的情况下进行访问,它会提供启用缓存的标题。从浏览器的角度来看,这将是两个不同的页面,缓存版本始终从每个登录框指向非缓存版本,注销指向缓存版本。我会从10分钟的缓存开始,如果服务器压力太大,最终会延长缓存时间。这就是我对您的评论的解释:)有趣的是,nginx已经在http2的fav中放弃了对spdy的支持,而且我还没有使用spdy,但就我看来,它更多的是针对连接(我仍然使用http1解决方案)。但预压缩html文件是对spdy/pagespeed模块的补充。预压缩意味着没有处理能力被用来压缩的需求,如果你得到我。最简单的方法是为登录用户创建一个不同的页面。一旦浏览器缓存了页面,实际上就不可能在设置的日期之前更新页面。但是,作为替代方案,您是否考虑过为静态页面提供服务并将标题设置为无缓存?包含该文件仍然需要php函数的开销,但您可以随意更新它。或者查看对象缓存。我已经使用Twig在服务器端进行了缓存。我想在客户端(和中间代理)也这样做,以减轻基于内容的服务的压力。因此,基本上我需要将表单action
index.php?logged=true
,这样我就可以再次访问同一个页面,但使用不同的链接。是的,但现在该页面已被缓存……您可以使用php更改标题,但如果您使用更高级别(即apache/nginx、htaccess)设置标题,则不能更改标题。相同的php脚本,如果使用
?logged=true
进行访问,它会将haders设置为不缓存,如果在没有该url的情况下进行访问,它会提供启用缓存的标题。从浏览器的角度来看,这将是两个不同的页面,缓存版本始终从每个登录框指向非缓存版本,注销指向缓存版本。我会从10分钟的缓存开始,如果服务器压力太大,最终会延长缓存时间。这就是我对您的评论的解释:)有趣的是,nginx已经在http2的fav中放弃了对spdy的支持,而且我还没有使用spdy,但就我看来,它更多的是针对连接(我仍然使用http1解决方案)。但预压缩html文件是对spdy/pagespeed模块的补充。预压缩意味着没有处理能力被用来压缩的需求,如果你得到我。但要以自己为基准。