gabrieleb
  • 0
Новичок

Ajax – почему несколько вызовов wp_create_nonce() возвращают одно и то же значение?

  • 0

У меня возникли проблемы с получением одноразовых номеров, работающих с моей формой отправки ajax.

Прежде всего, я создаю одноразовый номер и передаю его в свой зарегистрированный скрипт, позже я отправлю его в ajax-обработчик, упакованный с моими полями формы:

wp_localize_script( 'roll_script', 'Roll', array(
                    'postRollNonce' => wp_create_nonce('nonce-roll')));

В моем обработчике ajax-ответа я проверяю одноразовый номер, выполняю свои действия и пытаюсь создать новый одноразовый номер для отправки обратно в 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 должен меняться со временем, почему второй вызов wp_create_nonce возвращает ту же строку?

Share
  1. По умолчанию время жизни одноразового номера составляет один день. Одноразовый номер генерируется путем объединения переменной, представляющей текущий день, идентификатор пользователя и имя действия, и хэширования полученной строки.

    Если вы хотите, чтобы значение nonce менялось чаще, вы можете отфильтровать значение nonce_life. Эта функция, например, заставит одноразовые номера изменяться каждый час:

    function nonce_hourly() {
        return 3600;
        }
    add_filter( 'nonce_life', 'nonce_hourly' );
    

    Но это не совсем похоже на то, что вы пытаетесь сделать. Возможно, вам больше повезет с созданием одноразовых одноразовых номеров, которые вы хотите, используя другое имя для значения «действие» одноразового номера, которое будет действительно уникальным для конкретного действия, которое вы пытаетесь выполнить. Похоже, вы используете «nonce-roll» в качестве имени действия для некоторых отдельных действий, которые вы хотите проверять отдельно — возможно, вы можете использовать более конкретное имя действия для каждого действия, которое вы пытаетесь выполнить. выполнять и разрешать.

    • 0

Оставить ответ

You must login to add an answer.