Ajax调用后如何维护会话变量?

时间:2019-04-10 09:47:03

标签: php ajax wordpress woocommerce session-variables

我需要输入woocommerce结帐页面,以在每次刷新页面时更改其名称。它的名称更改为一些随机的数字字符串。 它是这样的:

session_start();
$code = rand(10000,99999);
$_SESSION["field_name"] = $code;

但是当我调用AJAX函数来处理此表单时,它无法验证输入,它表示未填写。但它是。发生这种情况是因为在ajax调用中输入名称的变量已更改。

我在页面上所做的操作:在输入下方,我打印出它的名称。每次刷新页面时都会更改。 我在错误消息中放入了相同的变量。因此,我可以判断它们是否匹配。剧透:不是。 而且,当我单击“提交”按钮时-错误显示了相同的变量(输入的名称),但是还有另一个数字。

这是我正在处理的结帐页面: https://elmersklei.ru/checkout/

为方便起见,我默认将一种产品放入购物车。

最后输入是我正在谈论的输入。

这是我使用的functions.php钩子:

add_filter( 'woocommerce_checkout_get_value' , 'clear_checkout_fields' );
/**
* Add the field to the checkout
*/
add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field' );

session_start();
$code = rand(10000,99999);
$_SESSION["field_name"] = $code;

function my_custom_checkout_field( $checkout ) {

session_start();




echo '<div id="my_custom_checkout_field"><h2>' . __('My Field') . '</h2>';

woocommerce_form_field( $_SESSION["field_name"], array(
    'type'          => 'text',
    'class'         => array('my-field-class form-row-wide'),
    'label'         => __('Fill in this field'),
    'placeholder'   => __('Enter something'),
    ), $checkout->get_value( 'my_field_name' ));

echo '</div>';

 print $_SESSION["field_name"];

}

/**
* Process the checkout
*/
add_action('woocommerce_checkout_process',             
'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {

session_start();



// Check if set, if its not set add an error.
if ( ! $_POST[$_SESSION["field_name"]] )
    wc_add_notice( __( $_SESSION["field_name"] ), 'error' );
}

我需要这样做,因为我正受到垃圾邮件机器人的攻击。我听说这有助于防止机器人发出虚假订单。预先谢谢你!

0 个答案:

没有答案