不确定是否是这种情况,但您应该知道,在生成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\' );