аякс - почему несколько вызовов wp create nonce() возвращают одно и то же значение?
У меня некоторые проблемы с тем, чтобы не работать с моей формой отправки ajax.
Сначала я создаю nonce и передаю его в свой зарегистрированный скрипт, позже я отправлю его в ajax-обработчик, упакованный с моими полями формы:
wp_localize_script( 'roll_script', 'Roll', array(
'postRollNonce' => wp_create_nonce('nonce-roll')));
В моем обработчике ajax-ответа я проверяю nonce, делаю свое дело и пытаюсь создать новый nonce для отправки обратно в js, для последующей отправки:
function on_ajax_roll(){
if (!wp_verify_nonce($_POST['postRollNonce'], 'nonce-roll' )) die ('No allowed!');
// nonce is valid! do some stuff...
$r = array('postRollNonce' => wp_create_nonce('nonce-roll'));
$response = json_encode($r);
header( "Content-Type: application/json" );
echo $response;
die();
}
...но, возвращаясь к моему js, новый nonce точно такой же, как и старый! Так как предполагается, что nonce чтобы измениться со временем, почему второй вызов wp_create_nonce возвращает ту же строку?
1 answers
По умолчанию срок службы nonce составляет один день. Nonce генерируется путем объединения переменной, представляющей текущий день, идентификатор пользователя и имя действия, и хэширования результирующей строки.
Если вы хотите, чтобы значение nonce менялось чаще, вы можете отфильтровать значение "none_life". Эта функция, например, заставит nonces меняться каждый час:
function nonce_hourly() {
return 3600;
}
add_filter( 'nonce_life', 'nonce_hourly' );
Но это тоже не совсем похоже на то, что вы пытаетесь сделать. У вас может быть лучше удачи в создании одноразовых одноразовых сообщений, которые вы хотите, используя другое имя для значения "действие", которое будет действительно уникальным для конкретного действия, которое вы пытаетесь выполнить. Похоже, что вы используете "nonce-roll" в качестве имени действия для некоторых отдельных действий, которые вы хотите иметь возможность проверять отдельно - возможно, вы можете использовать более конкретное имя действия для каждого действия, которое вы пытаетесь выполнить и авторизовать.