Limit the same form being submitted

zhaozj2021-02-11  194

Limit the same form being submitted

On the Internet, we will encounter countless forms every day, and most of them have not restricted users to submit the same form multiple times. Lack of this limitation sometimes generates some expected results, such as repeated subscription mail services or repeated votes.

This article describes a simple way to prevent users from submitting the same form multiple times during the current session in ASP applications. It is mainly composed of four subroutines, in a simpler application, you only put these code directly in the included file; for those more complex environments, we will give some improvements in the article.

First, the basic work process

Here we discuss these four subprograms in turn.

(1) initialization

Here we have to save two variables in the Session object, where:

(1) Each form corresponds to a unique identifier called FID, in order to make this value to use a counter.

(2) Whenever a form is successfully submitted, it must store its FID in a Dictionary object.

We use a dedicated process to initialize the above data. Although each subroutine will call it, it actually executes only once during each session:

Sub initializefid () if not isobject (SESSION ("FIDLIST") = Server.createObject ("scripting.dictionary") Session ("fid" = 0 end if End Sub

(2) Generating a unique identifier of a form

The following function generateFID () is used to generate a unique logo of the form. This function first adds the FID value 1 and then returns it:

Function GenerateFid () Initializefid Session ("FID") = session ("fid") 1 generatefid = session ("fid") End Function

(3) Registration has submitted a form

When the form is successfully submitted, register its unique identifier in the Dictionary object:

Sub registerfid () DIM STRFID INITIALIZEFID STRFID = Request ("fid") session ("fidlist"). Add strfiD, now () end SUB

(4) Check if the form is repeated

Before formally handling the form submitted, you should check if its FID has been registered in the Dictionary object. The following checkfid () function is used to complete this work, if it is already registered, it returns false, otherwise returns true:

Function checkfid () DIM STRFID INITIALIZEFID STRFID = Request ("FID") checkfid = not session ("fidlist"). Ends (strfid) end function

Second, how to use

There are two places to use the above functions, that is, when the form is generated, when processing is generated. Suppose the above four subroutines have been placed in the included files fors.inc, the following code determines the generation form or the processing form, which is suitable for most ASP applications based on the FID value.

<% OPTION Explicit%> form submission test </ title> </ head <body> <% if request (" FID ") =" "THENERATEFORM ELSE ProcessForm End IF%> </ body> </ html> generateform is responsible for generating a form, there should be a hidden FID in the form, such as:</p> <p><% SUB generateform ()%> <form action = "<% = request.serverVariables (" path_info ")%>" Method = get> <input type = hidden name = FID value = "<% = generatefid ()%> "> <input type = text name =" param1 "value ="> <input type = subsmit value = "ok"> </ form> <% end sub%></p> <p>ProcessForm is responsible for processing content submitted through a form, but should call checkfid () before processing whether the current form is already submitted, code class, code, code, code, "The content you entered" "& Request.QueryString (" Param1 ") Registerfid else response.write" This form can only be submitted once! "End if End Sub%></p> <p>Third, limit and improvement measures</p> <p>Above we introduced a method that restricts the same form during the current session. In practical applications, it may be necessary to improve from many aspects, for example:</p> <p>(1) Check the legality of the user input data before the registration form ID, allows the user to return to the "Back" button while the data is not legally returned, and then submit the same form again after fixing.</p> <p>(2) This restrictions on forms of forms can only be valid during the current session. If this restriction is required to span multiple sessions, then use the Cookeis or database to save relevant data.</p> <p>(3) This method is unsafe. It is only used to prevent misoperation, which cannot prevent skilled users from being intentionally submitted multiple times.</p></div><div class="text-center mt-3 text-grey"> 转载请注明原文地址:https://www.9cbs.com/read-4133.html</div><div class="plugin d-flex justify-content-center mt-3"></div><hr><div class="row"><div class="col-lg-12 text-muted mt-2"><i class="icon-tags mr-2"></i><span class="badge border border-secondary mr-2"><h2 class="h6 mb-0 small"><a class="text-secondary" href="tag-2.html">9cbs</a></h2></span></div></div></div></div><div class="card card-postlist border-white shadow"><div class="card-body"><div class="card-title"><div class="d-flex justify-content-between"><div><b>New Post</b>(<span class="posts">0</span>) </div><div></div></div></div><ul class="postlist list-unstyled"> </ul></div></div><div class="d-none threadlist"><input type="checkbox" name="modtid" value="4133" checked /></div></div></div></div></div><footer class="text-muted small bg-dark py-4 mt-3" id="footer"><div class="container"><div class="row"><div class="col">CopyRight © 2020 All Rights Reserved </div><div class="col text-right">Processed: <b>0.050</b>, SQL: <b>9</b></div></div></div></footer><script src="./lang/en-us/lang.js?2.2.0"></script><script src="view/js/jquery.min.js?2.2.0"></script><script src="view/js/popper.min.js?2.2.0"></script><script src="view/js/bootstrap.min.js?2.2.0"></script><script src="view/js/xiuno.js?2.2.0"></script><script src="view/js/bootstrap-plugin.js?2.2.0"></script><script src="view/js/async.min.js?2.2.0"></script><script src="view/js/form.js?2.2.0"></script><script> var debug = DEBUG = 0; var url_rewrite_on = 1; var url_path = './'; var forumarr = {"1":"Tech"}; var fid = 1; var uid = 0; var gid = 0; xn.options.water_image_url = 'view/img/water-small.png'; </script><script src="view/js/wellcms.js?2.2.0"></script><a class="scroll-to-top rounded" href="javascript:void(0);"><i class="icon-angle-up"></i></a><a class="scroll-to-bottom rounded" href="javascript:void(0);" style="display: inline;"><i class="icon-angle-down"></i></a></body></html><script> var forum_url = 'list-1.html'; var safe_token = 'zV8Da0yYEYdMkFKaAQYAyRoKhQapVOJT5k20FF7MNzxcKxC032M5wCTedkXY5AyaTJkKoH_2Br0RybYrvFYMnb_2FQ_3D_3D'; var body = $('body'); body.on('submit', '#form', function() { var jthis = $(this); var jsubmit = jthis.find('#submit'); jthis.reset(); jsubmit.button('loading'); var postdata = jthis.serializeObject(); $.xpost(jthis.attr('action'), postdata, function(code, message) { if(code == 0) { location.reload(); } else { $.alert(message); jsubmit.button('reset'); } }); return false; }); function resize_image() { var jmessagelist = $('div.message'); var first_width = jmessagelist.width(); jmessagelist.each(function() { var jdiv = $(this); var maxwidth = jdiv.attr('isfirst') ? first_width : jdiv.width(); var jmessage_width = Math.min(jdiv.width(), maxwidth); jdiv.find('img, embed, iframe, video').each(function() { var jimg = $(this); var img_width = this.org_width; var img_height = this.org_height; if(!img_width) { var img_width = jimg.attr('width'); var img_height = jimg.attr('height'); this.org_width = img_width; this.org_height = img_height; } if(img_width > jmessage_width) { if(this.tagName == 'IMG') { jimg.width(jmessage_width); jimg.css('height', 'auto'); jimg.css('cursor', 'pointer'); jimg.on('click', function() { }); } else { jimg.width(jmessage_width); var height = (img_height / img_width) * jimg.width(); jimg.height(height); } } }); }); } function resize_table() { $('div.message').each(function() { var jdiv = $(this); jdiv.find('table').addClass('table').wrap('<div class="table-responsive"></div>'); }); } $(function() { resize_image(); resize_table(); $(window).on('resize', resize_image); }); var jmessage = $('#message'); jmessage.on('focus', function() {if(jmessage.t) { clearTimeout(jmessage.t); jmessage.t = null; } jmessage.css('height', '6rem'); }); jmessage.on('blur', function() {jmessage.t = setTimeout(function() { jmessage.css('height', '2.5rem');}, 1000); }); $('#nav li[data-active="fid-1"]').addClass('active'); </script>