缓存:强制为登录用户提供新内容(可能是通过向URL添加查询变量)

时间:2015-06-10 作者:Christine Cooper

如果注销的用户访问某个页面,然后在登录时重新访问该页面,则会显示缓存的版本。有一个closed question 与此类似,答案建议将缓存控制设置为no-cache. 这将影响logged-out 用户,这首先破坏了缓存的目的。

使用页/浏览器缓存时出现的问题T3 Total Cache 或者可能是其他缓存插件,如果您在注销时已经访问了某个页面,则将显示该页面的相同注销版本,除非您刷新该页面。

您可以通过以下方式复制此问题:

启用缓存。然后,在匿名模式下,访问帖子。

登录网站,然后在地址栏中手动键入该帖子的URL。应显示页面的注销版本。

这显然是一个问题,您只有登录用户才能使用任何功能(如评论、投票等)。。。

可能的解决方案我唯一可能的解决方案是在每个请求的URL中添加一个查询变量。例如,通过添加随机值:

$key = rand();
$new_url = esc_url( add_query_arg( \'foo\', $key ) );
我知道如何手动将此变量添加到单个查询中,但不是更改链接的每个瞬间,是否有方法将此强制添加到登录用户的每个URL?

Note: 我不确定这是否是解决这个问题的理想方法(感觉很绝望),所以请随时发布一个有更好解决方案的答案。

2 个回复
SO网友:E. Serrano

既然您已经激活了“不缓存登录用户的页面”选项,那么选择cache with validation 在下面Cache Control Policy 对于“HTML”内容?

说明:本质上,“不缓存登录用户的页面”选项应该已经发送了no-cache 标题仅适用于登录用户。

如果用户在其浏览器中有一个缓存页面(作为非登录用户),然后在登录时尝试访问同一页面,则cache with validation HTML内容的“缓存控制策略”设置中的选项应发送must-revalidate 标签

因此,登录用户将发送no-cache,must-revalidate, 总是要求刷新页面。

这几乎就是@gmazzap用头解释的内容,但从W3总缓存配置的角度来看。

SO网友:dsmith63

从我的测试中,“;“不缓存登录用户的页面”;仅适用于;“基本”;W3 Total Cache中的磁盘缓存类型。假设这是真的,我能想到的唯一方法是将页面缓存类型切换到磁盘:Basic,并启用;“不缓存已登录的用户”;设置或使用页面片段:

结束

相关推荐

Nonces and Cache

很明显,表单提交和AJAX请求,尤其是合理的请求,需要“nonces”来避免某些攻击。然而,随着高速缓存系统的大量使用,很难生成它们并输出新的nonce而不是高速缓存的nonce。为了解决这个问题,我考虑创建一个AJAX函数,返回一个新的nonce,在提交表单之前进行请求。然后,此nonce将作为隐藏字段附加到表单中。你认为这是一种安全的方法吗?返回新nonce的PHP函数:function create_nonce() { return wp_create_nonce(\'my-nonc