ale*_*ane 2 php cookies wordpress caching
我有一个 WordPress 网站,它的登录名由 3rd 方服务管理。当用户通过此服务登录时,会设置 cookie。
当用户登录(设置 cookie)时,我不希望使用 WP Super Cache 缓存页面。我知道我可以使用define('DONOTCACHEPAGE', TRUE); 但是如何在设置第 3 方 cookie 时尽早设置(最好在 functions.php 中)?
我已经尝试了一个 'init' 钩子,但是这不会在缓存页面上被调用(我假设这只是直接从 .html 加载的)。
function disable_super_cache() {
die("Cookie Logic");
//define(‘DONOTCACHEPAGE’, TRUE);
}
add_action('init', 'disable_super_cache', 9999);
Run Code Online (Sandbox Code Playgroud)
我如何设置得足够早?
更新
我意识到我从错误的角度看这个。我不需要将常量设置为一个动作,因为它只需要尽早设置。我目前最接近的是 wp-config.php 中的以下内容(因为 Super Cache 在甚至 root functions.php 逻辑之前被调用)。但这似乎是一个巨大的解决方法,欢迎提出更好的建议。
/**
* Disable WP Super Cache when a user is logged in
*/
if( isset( $_COOKIE['LoggedInCookie'] ) ){
$_GET['donotcachepage'] = '{secret}';
//define( 'DONOTCACHEPAGE', 1 ) // Doesn't stop caching even in wp-config.php, bug in WP-Super-Cache??;
}
Run Code Online (Sandbox Code Playgroud)
好吧,过了一会儿,我似乎不会在这里得到答案,所以我认为最好尽可能贴近我的帖子。我有 2 个解决方案,一个直接回答我的问题,但感觉有点 hacky,另一个是更有效的解决方法。
理想情况下,应该有一个常量/变量来停止缓存,即使页面已经被缓存。'DONOTCACHEPAGE' 仅在页面尚未缓存时停止缓存。
解决方案1(来自问题)
这会手动强制 $_GET['donotcachepage'] 变量。虽然这对我来说似乎有点hacky,但它确实有效。
/**
* Disable WP Super Cache when a user is logged in
*/
if( isset( $_COOKIE['LoggedInCookie'] ) ){
$_GET['donotcachepage'] = '{secret}';
//define( 'DONOTCACHEPAGE', 1 ) // Doesn't stop caching even in wp-config.php, bug in WP-Super-Cache??;
}
Run Code Online (Sandbox Code Playgroud)
解决方案 2
在 WP Super Cache 高级设置中,有一个名为“不为已知用户缓存页面”的设置。(受到推崇的)'。当用户登录 WordPress 时,它基本上会停止缓存。
当用户使用 WordPress 登录时,会设置一个名为“wordpress_logged_in_{hash}”的 cookie。由于我的应用程序不会将用户登录到 WordPress,我们可以通过设置具有相似名称的 cookie 来创建相同的效果,在我的情况下,我设置了“wordpress_logged_in_nocache”。这使 WP Super Cache 误以为用户已登录,因此它不再缓存启用了上述设置的页面。
第二种解决方案并没有真正直接回答我的问题,但是如果我将 cookie 更改为上述内容,我会得到相同的结果。解决方案 2 对我来说感觉更稳定一些。所以我会推荐那个。