ฉันพบปัญหาที่ผู้ใช้สามารถส่งฟอร์มใด ๆ ที่สร้างขึ้นโดย Form API หลายครั้ง (การคลิกที่รวดเร็วทำให้เกิดคำขอหลายรายการ)
ฉันได้ใส่โซลูชันพื้นฐานด้านไคลเอนต์ (javascript) ของการปิดใช้งานปุ่ม แต่ฉันอยากรู้ว่าวิธีที่ดีที่สุดในการป้องกันสถานการณ์นี้อยู่ที่ฝั่งเซิร์ฟเวอร์
มีวิธีแนะนำให้ใช้ระบบโทเค็นแบบฟอร์มของ Drupal เพื่อจัดการสิ่งนี้หรือไม่? โดยเฉพาะอย่างยิ่งโซลูชันแบบโกลบอล (เช่นการเพิ่มตัวตรวจสอบความถูกต้องที่กำหนดเองให้กับทุกรูปแบบโดยใช้ hook_form_alter ())
วิธีการของฉันจนเป็นเช่นนี้:
function mymodule_form_alter(&$form, &$form_state, $form_id) {
$form['#validate'][] = 'mymodule_form_validate';
}
function mymodule_form_validate(&$form, &$form_state){
//initialize form array
if (!isset($_SESSION['submitted_forms'])){
$_SESSION['submitted_forms'] = array();
}
$form_token = $form_state['values']['form_token'];
if ( isset($_SESSION['submitted_forms'][$form_token]) && $_SESSION['submitted_forms'][$form_token] = TRUE ){
form_set_error('name]', 'This form has already been submitted');
}
else{
$_SESSION['submitted_forms'][$form_token] = TRUE;
}
}
ฉันพบปัญหาเมื่อ form_token ไม่ซ้ำกับแบบฟอร์ม - ดูเหมือนว่าจะยังคงเหมือนเดิมไม่ว่าจะเกิดอะไรขึ้น ฉันอาจเข้าใจผิดว่าโทเค็นนั้นอยู่ในรูปแบบที่ยิ่งใหญ่ของแบบฟอร์ม API
ความเข้าใจใด ๆ ที่ชื่นชม!