gpt4 book ai didi

php - 绕过 W3 Total Cache 创建的页面缓存

转载 作者:行者123 更新时间:2023-12-04 02:22:19 25 4
gpt4 key购买 nike

我正在使用 APC 模块使用 W3 Total 缓存插件设置页面缓存。问题是,自从我启用了页面缓存 cookie 后,我在主题 header 中设置的 cookie 停止设置,同时读取现有 cookie 并按其值重定向也停止工作。

我几乎 100% 肯定是页面缓存导致的,我无法找到合适的编程解决方案来拦截页面缓存并在 W3TC 页面缓存之前设置所需的 cookie。同样简单的调试显示正在读取 PHP 脚本但 setCookie 未设置 cookie。此外,通过 wordpress 管理清除页面缓存并清除清漆缓存允许设置 cookie,尽管只有一次,因为对页面的其余调用将被缓存(304 响应)。

我已经查阅了关于 setcookie 的 PHP 手册并确保我的 cookie 设置在任何 HTML/空格之前

我检查了 .htaccess 文件,那里没有设置页面缓存,所以我认为使用 PHP 应该可以解决这个问题。

我不想禁用页面缓存并失去它提供的服务器响应时间重大改进。

有什么办法可以解决这个问题吗?

最佳答案

这很可能是清漆问题。当您访问 WP 网站的后端时,您可能希望禁用它缓存您的 cookie,并在修改您的主题后清除 Varnish 的缓存,以便它缓存您网站的新“ View ”。

我之前使用过您的 W3TC + Varnish 解决方案,需要一些修改才能正确使用。我关于使用 Varnish for WP 的技巧(配置的一部分)你可以引用(而不是复制):

sub vcl_recv {
# Don't cache WordPress backend
if (req.url ~ "wp-(login|admin|comments-post.php|cron.php)" || req.url ~ "preview=true" || req.url ~ "xmlrpc.php") {
return (pass);
}

# Don't cache if WordPress cookie is present
if (req.http.cookie) {
if (req.http.cookie ~ "(wordpress_|wp-settings-)") {
return(pass);
} else {
unset req.http.cookie;
}
}
}

sub vcl_fetch {
# Don't cache WordPress backend
if (req.url ~ "wp-(login|admin|comments-post.php|cron.php)" || req.url ~ "preview=true" || req.url ~ "xmlrpc.php") {
set beresp.http.magicmarker = "1";
return (hit_for_pass);
}
if ( (!(req.url ~ "(wp-(login|admin|comments-post.php|cron.php)|login)")) || (req.request == "GET") ) {
unset beresp.http.set-cookie;
set beresp.ttl = 4h;
}
}

然后还添加一个 PURGE block ,以便 W3TC 可以在站点/主题更新后清除缓存(而不是您手动执行)。

acl purge {
# Only allow the server to issue PURGE requests
"127.0.0.1";
"localhost";
"162.243.151.227";
}

sub vcl_hit {
if (req.request == "PURGE") {
purge;
error 200 "HIT Purged.";
}
}

sub vcl_miss {
if (req.request == "PURGE") {
purge;
error 200 "MISS Purged.";
}
}

sub vcl_recv {
# PURGE requests
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 401 "Not allowed.";
}
# 3 ways to refresh the cache:
# 1: force lookup
# return (lookup);
# 2: url purging: http://wordpress.stackexchange.com/questions/76037/make-w3-total-cache-empty-all-caches-function-purge-varnish
# purge_url(req.url);
# 3: ban to invalidate cache content
ban("req.url ~ ^" + req.url + "$ && req.http.host == " + req.http.host);
error 200 "RECV Purged.";
# Observe with: varnishlog -I 'VCL_error'
}
}

关于php - 绕过 W3 Total Cache 创建的页面缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27423528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com