-
Notifications
You must be signed in to change notification settings - Fork 12
Description
The plugin currently currently advises:
Nonces created on the front-end, often used to secure forms and other data, have a lifetime, and if the cache max age is longer than the nonce lifetime, the nonce may expire before the cache does. To avoid this, you can use the
pantheon_cache_nonce_lifetimeaction to set thepantheon_cache_default_max_ageto less than the nonce lifetime. For example:do_action( 'pantheon_cache_nonce_lifetime' );It's important to wrap your
do_actionin the appropriate conditionals to ensure that the action is only called when necessary and not filtering the cache max age in cases when it's not necessary. This might mean only running on certain pages or in certain contexts in your code.
However, is this manual call to do_action( 'pantheon_cache_nonce_lifetime' ) necessary?
Couldn't the plugin hook into whether the nonce_life filter is ever applied, which occurs when wp_create_nonce() is called? In other words, it would seem like this plugin should do something like the following instead of what filter_nonce_cache_lifetime() is doing:
add_filter(
'nonce_life',
static function ( $nonce_life ) {
if ( ! is_admin() ) {
add_filter(
'pantheon_cache_default_max_age',
static function ( $max_age ) use ( $nonce_life ) {
return min( $max_age, $nonce_life - HOUR_IN_SECONDS );
}
);
}
return $nonce_life;
},
PHP_INT_MAX
);This would ensure that themes and plugins which create nonces will automatically get their cache max-age reduced.
General question: How does the caching layer obtain the return value from the get_current_max_age() function? It doesn't seem to be getting sent back from any HTTP header. Or is it? Will a nonce created after headers are sent fail to reduce the pantheon_cache_default_max_age as required?