Чи можу я використовувати одне і те ж поняття для кількох запитів на одній сторінці?


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

Функцію створення nonce WordPress потрібно викликати лише на initгачку:

Використовуйте init або будь-яку наступну дію для виклику цієї функції. Виклик його поза дією може призвести до проблем. Детальніше дивіться на # 14024 .

Оскільки initгачок "працює після завершення завантаження WordPress, але перед надсиланням будь-яких заголовків", для кожного запиту на повну сторінку (не запиту ajax) створюються місії. Отже, технічно ви можете використовувати одне і те ж поняття у кількох запитах, але ви повинні зробити їх унікальними для кожного запиту , як вказували інші відповіді.


Щоб пролити ще трохи світла на те, що таке поняття:

Безглузді надсилаються на кожен запит Ajax як маркер безпеки, щоб переконатися, що запит призначений користувачем.


Цей висновок, мабуть, ґрунтується на хибному припущенні, що випадки є способом запобігти крадіжці особи. Дивіться wordpress.stackexchange.com/a/32361/205
scribu

@scribu дякую за розуміння. Я відредагував відповідь.
Naoise Golden

9

Так, думки дуже заплутані. :)

Незважаючи на те, що поняття nonce передбачає, що воно використовується лише один раз, WordPress цього не виконує, а технічно ви можете використовувати nonce кілька разів.

Однак оскільки не використовується для перевірки наміру (як це було у вас дійсно, ви хочете виконати конкретну дію) - різні дії повинні мати різні погляди, що генеруються та перевіряються.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.