我正在运行一个带有 Wordpress 博客的 RoR 网站,我刚刚在 Wordpress 中使用用户登录时由主 (RoR) 站点设置的 cookie 实现了一个登录/注销标头。
一切正常,除了当用户登录或注销(从 RoR 站点)时,我需要在 wordpress 站点上进行硬刷新以查看修改后的标头。我需要解决这个问题。
我的问题是 -这是我的缓存设置的问题,还是我应该以不同的方式实施解决方案?
我的解决方案
我的 RoR 网站会在用户登录时创建一个名为“登录”的 cookie,并在用户注销时删除该 cookie。
我编辑了我的子主题header.php以插入此代码:
<?php if(isset($_COOKIE['login'])) : ?>
<!-- logged in header -->
<?php else : ?>
<!-- not logged in header -->
<?php endif; ?>
缓存
我使用了很多缓存/优化插件/服务/设置,包括:
云焰
WP超级缓存
自动优化
Apache 配置来设置 Cache-Control 和 Expires 标题
首先,我禁用了 WP Super Cache,因为它的主要功能似乎是缓存 HTML 和 PHP,并且在插件处于活动状态的情况下,我需要在标头通过硬刷新更新之前删除缓存。
然后我取消选中 Autoptimze 设置以禁用 HTML 缓存。
然后我检查了我的 Cloudflare 设置——我正在使用标准缓存,使用现有的标头,并且没有进行任何缩小。
最后我的 Apache 配置似乎是正确的:
<IfModule mod_headers.c>
...
<FilesMatch "\.(html|htm|php|pdf)$">
Header set Cache-Control "max-age=0, private, no-store, no-cache, must-revalidate"
</FilesMatch>
</IfModule>
作为附加测试,我直接(通过 IP 地址)访问了该网站,这似乎工作正常。我还在 Chrome 开发人员工具的网络选项卡上勾选了“禁用缓存”,并运行了一些测试,效果也很好。
因此,我认为现在问题出在 Chrome 上。
当我查看 HTTP 请求标头时,在注销或登录后返回到 Wordpress 站点后,我看到了:
Status Code: 200 (from disk cache)
当我单击浏览器刷新按钮时,页面刷新并且标题正确。
以下是显示错误标头时的 HTTP 响应标头:
cache-control: private, must-revalidate
cf-cache-status: DYNAMIC
cf-ray: 593e0b2e0cc706c5-LHR
cf-request-id: 02baa550c6000006c5e7912200000001
content-encoding: br
content-type: text/html; charset=UTF-8
date: Fri, 15 May 2020 15:55:31 GMT
expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
expires: Fri, 15 May 2020 16:05:30 GMT
link: <https://www.example.com/blog/wp-json/>; rel="https://api.w.org/"
server: cloudflare
status: 200
vary: Accept-Encoding,User-Agent
慕哥9229398