【问题标题】:Disable WP Super Cache When a Cookie is Set设置 Cookie 时禁用 WP Super Cache
【发布时间】:2017-06-23 08:26:54
【问题描述】:

我有一个 WordPress 网站,其登录由第三方服务管理。当用户通过此服务登录时,会设置一个 cookie。

当用户登录(cookie 集)时,我不希望页面使用 WP Super Cache 进行缓存。我知道我可以使用 define('DONOTCACHEPAGE', TRUE);但是当设置 3rd 方 cookie 时,如何尽早设置(最好在 functions.php 中)?

我尝试了一个“init”钩子,但它不会在缓存页面上调用(我假设这只是直接从 .html 加载的)。

function disable_super_cache() {
  die("Cookie Logic");
  //define(‘DONOTCACHEPAGE’, TRUE);
}

add_action('init', 'disable_super_cache', 9999);

如何尽早设置?

更新

我意识到我从错误的角度看待这个问题。我不需要将常量设置为动作,因为它只需要尽早设置。我目前最接近的是 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??;
}

【问题讨论】:

  • 您已经浏览过 API 并检查了所有操作吗? codex.wordpress.org/Plugin_API/Action_Reference
  • @PeterFeatherstone 是的,我只是在“init”之上尝试了所有这些,但没有运气。我想我可能会尝试编辑“wp-cache-config.php”以添加一个函数...

标签: php wordpress caching cookies


【解决方案1】:

好吧,过了一会儿,我似乎不会在这里得到答案,所以我认为最好尽可能接近地发布。我有 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??;
}

解决方案 2

在 WP Super Cache 高级设置中,有一个名为“不为已知用户缓存页面”的设置。 (推荐的)'。当用户登录 WordPress 时,它基本上会停止缓存。

当用户使用 WordPress 登录时,会设置一个名为“wordpress_logged_in_{hash}”的 cookie。由于我的应用程序没有将用户登录到 WordPress,我们可以通过设置具有相似名称的 cookie 来创建相同的效果,在我的例子中,我设置了“wordpress_logged_in_nocache”。这使 WP Super Cache 误以为用户已登录,因此它不再缓存启用上述设置的页面。

第二个解决方案并没有真正直接回答我的问题,但是如果我将 cookie 更改为上述内容,我会得到相同的结果。解决方案 2 对我来说感觉更稳定一些。所以我会推荐它。

【讨论】:

  • re:上面的解决方案 2 - 以防万一其他人逐字逐句遵循,WP Super Cache 现在似乎使用[0-9a-f]+ cookie 前缀之后的字符串进行验证,因此现在按照您的“wordpress_logged_in_nocache”示例进行验证作为“nocache”的工作包含在字母表中高于“f”的字符,但类似于“wordpress_logged_in_abcdef123456789”的东西将工作。 span>
猜你喜欢
  • 1970-01-01
  • 2017-06-18
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 2015-01-27
  • 2012-07-30
  • 2015-08-25
  • 1970-01-01
相关资源
最近更新 更多