मैं वापस/आगे या पृष्ठ को रीफ्रेश करके डुप्लिकेट फॉर्म सबमिशन को रोकने के लिए एक तकनीक के साथ आया था। और मैंने इसे यहां पर चर्चा करने के बारे में सोचा, मैंने पहले से ही एक नमूना का परीक्षण किया है जो उत्पादन वातावरण में नहीं है, आप किस दोष की पहचान कर सकते हैं?डुप्लिकेट फॉर्म सबमिशन को रोकना
कृपया ध्यान दें कि मैं फॉर्म टोकन का उपयोग करने के बारे में अच्छी तरह से जानता हूं, जो आपको सीएसआरएफ हमलों के खिलाफ बचाव करेगा, और नीचे दिए गए चरणों में नहीं जोड़ा गया था।
प्रत्येक प्रपत्र के लिए-Generate फार्म आईडी, और के रूप में के रूप में छिपे हुए फ़ील्ड इसका इस्तेमाल:
$formid = microtime(true)*10000;
- प्रपत्र पर प्रस्तुत: डेटा से
मान्य
फॉर्म फ़ील्ड डेटा के हैश की गणना करें
$allvals = ''; foreach($_POST as $k=>$v){ $allvals .= $v; } $formHash = sha1($allvals);
पहले सहेजे गए हैंश की तुलना करके फॉर्म हैश को मान्य करें। सत्र मान प्रत्येक फॉर्म को $ formid चर से बांध दिया जाता है।
$allowAction = true; if(isset($_SESSION['formHash'][$_POST['formid']]) && ($_SESSION['formHash'][$_POST['formid']] == $formHash)){ $allowAction = false; }
- यदि फॉर्म हैश नहीं मिला है, तो इसका मतलब है कि यह पहली बार सबमिट किया गया है या फॉर्म डेटा बदल दिया गया है।
डेटा (डेटाबेस के लिए उदाहरण के लिए,) को बचाया, तो सत्र के लिए प्रपत्र हैश को बचाने:
$_SESSION['formHash'][$_POST['formid']] = $formHash;
कोड के पूर्ण संस्करण: http://thebusy.me/2011/01/06/preventing-duplicate-form-submissions/
'हैश स्निपेट को' $ formHash = sha1 (serialize ($ _ POST)) के विरुद्ध बेंचमार्क करने पर विचार करें; '। इसमें हैश कुंजी भी होगी, जो फायदेमंद हो सकती है या नहीं भी हो सकती है। – Dan
संभावित रूप से संबंधित/डुप्लिकेट, http://stackoverflow.com/questions/4614052/how-to-prevent-multiple-form-submission-on-multiple-clicks-in-php/4614310#4614310 – user562374
http: // के संभावित डुप्लिकेट /stackoverflow.com/questions/218907/how-to-handle-multiple-submissions-server-side –