Допустим, у меня есть плагин WordPress, и в форме я использую wpnonce
<form id="myForm">
<input type="hidden" id="myFormId" name="myFormId" value="<?php echo($myFormId); ?>" />
<div id="myNonceWrapper" style="display:none;">
<?php
if ( function_exists('wp_nonce_field') )
{
return wp_nonce_field('my_action' . $myFormId);
}
?>
</div>
Затем на бэкэнде вы проверяете, что одноразовый номер действителен
$nonce = $_POST["nonce"];
$myFormId = $_POST["myFormId"];
if(!wp_verify_nonce($nonce, $myFormId))
{
return "nonce error";
}
Но каждые 24 часа срок действия одноразового номера истекает. Так что это означает, что если кто-то загружает страницу, то через 24 часа они вводят информацию в форму и отправляют, форма не будет выполнена.
Это результат того, что срок действия одноразового номера уже истек.
Итак, чтобы избежать этого, нужно ли добавлять какой-то код для обновления одноразового номера каждый раз? Как в конце javascript?
// renew nonce every 10 hours
setInterval(getNewNonceForMyForm(), 1000 * 60 * 60 * 10)
Будет ли проблема с отображением одноразового имени? Например ...
function getNewNonceForMyForm() {
var myFormId = $["#myFormId"].val();
var data = {
action: 'get_new_nonce',
nonce_name: 'my_form_nonce' + myFormId
};
jQuery.post(my_ajax.ajax_url, data, function(response) {
//response contains the new nonce code from doing wp_nonce_field($nonceName)
$('#myNonceWrapper').html(response);
});
}
Что-нибудь, что мне не хватает?