Могу ли я использовать одноразовый номер для нескольких запросов на одной странице?


13

Или это нарушает цель одноразового номера, который, по моему мнению, я не совсем понимаю? :)

Например, для двух запросов ajax, которые запускаются при загрузке страницы, или когда что-то нажимается:

 $.ajax({
   type: 'post',
   url: 'admin-ajax.php',
   data: { action: 'foo',
           _ajax_nonce: '<?php echo $nonce; ?>' }
 });

 $.ajax({
   type: 'post',
   url: 'admin-ajax.php',
   data: { action: 'foo2',
           _ajax_nonce: '<?php echo $nonce; ?>' }
 });

Ответы:


4

Функция создания одноразового WordPress должна вызываться только на initкрючке:

Используйте init или любое последующее действие для вызова этой функции. Вызов его вне действия может привести к неприятностям. Смотрите # 14024 для деталей.

Поскольку initловушка «запускается после завершения загрузки WordPress, но до отправки любых заголовков», одноразовые номера создаются при каждом полностраничном запросе (а не при запросе ajax). Таким образом, технически вы можете использовать один и тот же одноразовый номер для нескольких запросов, но вы должны делать их уникальными для каждого запроса , как указывалось в других ответах.


Чтобы пролить свет на то, что такое одноразовые номера:

Одноразовые запросы отправляются на каждый Ajax-запрос в качестве маркера безопасности, чтобы гарантировать, что запрос был задан пользователем.


Этот вывод, кажется, основан на неправильном предположении, что одноразовые номера являются способом предотвращения кражи личных данных. См. Wordpress.stackexchange.com/a/32361/205
scribu

@ Scribu спасибо за понимание. Я отредактировал ответ.
Наойз Голден

9

Да, одноразовые номера очень запутаны. :)

Хотя понятие одноразового номера подразумевает, что оно используется только один раз, WordPress не применяет его, и технически вы можете использовать одноразовый номер несколько раз.

Тем не менее, поскольку одноразовый номер используется для проверки намерения (как вы действительно хотели выполнить определенное действие) - разные действия должны генерировать и проверять разные одноразовые номера.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.