延长特定随机数创建的随机数生命周期

时间:2021-02-02 作者:Kevin Nugent

我已经成功过滤了全局nonce\\u生命,但在以中所述的方式将过滤器应用于特定函数时遇到了问题this answer.

function quote_nonce_lifetime( $day_in_seconds ) {
    return 604800; // 7 days
}
add_filter( \'nonce_life\', \'quote_nonce_lifetime\' );
上述方法工作并影响所有nonce。但是,我只想延长特定类型的nonce的nonce生存期,例如:

add_filter( \'nonce_life\', \'quote_nonce_lifetime\' );
$link = wp_nonce_url( get_site_url().\'/?quote=\'.$id, \'view-quote\' );
remove_filter( \'nonce_life\', \'quote_nonce_lifetime\' );
。。。但它只是显示我的临时链接已经过期。这种方法行得通还是我找错了方向?

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

不确定是否是这种情况,但您应该知道,在生成URL和验证nonce时,都需要添加过滤器,即在这两种情况下,nonce的寿命都需要匹配。此外,您应该使用add_query_arg() 将查询字符串添加到URL。。

如果你有这个:

add_filter( \'nonce_life\', \'quote_nonce_lifetime\' );

$id = 123; // just for testing
$link = wp_nonce_url( add_query_arg( \'quote\', $id, home_url( \'/\' ) ), \'view-quote\' );

remove_filter( \'nonce_life\', \'quote_nonce_lifetime\' );
然后在验证nonce时,例如使用wp_verify_nonce(), 添加与上述相同的筛选器:

add_filter( \'nonce_life\', \'quote_nonce_lifetime\' );

// *In actual implementation, you should check whether the $_GET[\'_wpnonce\'] exists.
if ( wp_verify_nonce( $_GET[\'_wpnonce\'], \'view-quote\' ) ) {
    echo \'nonce is valid :)\';
} else {
    echo \'nonce has expired!\';
}

remove_filter( \'nonce_life\', \'quote_nonce_lifetime\' );

相关推荐

绕过WP查询中的“supress_Filters”

显然,出于某种不合逻辑的原因,开发人员决定获取所有语言帖子的唯一方法是添加supress_filters=true 到WP\\u查询(而不是像这样language_code=all 选项)。无论如何,我的情况是,我需要获取所有语言的帖子,但也需要使用过滤器修改WP\\u查询。有没有办法强制将我的过滤器添加到查询中,即使supress_filters 设置为false?这是我需要添加的过滤器:add_filter( \'posts_where\', function($where, $wp_query) {