نواجه عددًا لا يحصى من النماذج على الإنترنت كل يوم، ونرى أيضًا أن معظمها لا يمنع المستخدمين من إرسال نفس النموذج عدة مرات. يمكن أن يؤدي عدم وجود مثل هذه القيود في بعض الأحيان إلى بعض النتائج غير المتوقعة، مثل الاشتراكات المتكررة في خدمات البريد الإلكتروني أو التصويت المتكرر. ربما لا يعرف بعض مبتدئي ASP كيفية الحد من الإرسال المتكرر لنفس النموذج في تطبيقات ASP، لذا سأقدم لك هنا طريقة بسيطة لمنع المستخدمين من إرسال نفس النموذج عدة مرات أثناء الجلسة الحالية في تطبيقات ASP.
يتكون هذا العمل بشكل أساسي من أربعة إجراءات فرعية، في التطبيقات الأبسط، ما عليك سوى وضع هذه الرموز في الملفات المضمنة للرجوع إليها مباشرة؛ وبالنسبة للبيئات الأكثر تعقيدًا، فإننا نقدم بعض اقتراحات التحسين في نهاية المقالة.
1. عملية العمل الأساسية
نناقش أدناه هذه الإجراءات الفرعية الأربعة تباعًا.
(1) التهيئة
نحتاج هنا إلى حفظ متغيرين في كائن الجلسة، من بينهما:
⑴ يتوافق كل نموذج مع معرف فريد يسمى FID، ويتم استخدام عداد لجعل هذه القيمة فريدة.
⑵ عندما يتم إرسال النموذج بنجاح، يجب تخزين FID الخاص به في كائن القاموس.
نحن نستخدم عملية مخصصة لتهيئة البيانات المذكورة أعلاه. على الرغم من أنه سيتم استدعاؤه بواسطة كل روتين فرعي في المستقبل، إلا أنه في الواقع يتم تنفيذه مرة واحدة فقط خلال كل جلسة:
Sub InitializeFID()
إذا لم يكن IsObject(Session("FIDList")) إذن
تعيين الجلسة("FIDList")=Server.CreateObject("Scripting.Dictionary")
الجلسة("FID")=0
نهاية إذا
End Sub
(2) إنشاء المعرف الفريد للنموذج
يتم استخدام الدالة التالية GenerateFID() لإنشاء المعرف الفريد للنموذج.
تقوم
هذه الدالة أولاً بزيادة قيمة FID بمقدار 1 ثم تقوم بإعادتها:
تهيئةFID
جلسة ("FID") = جلسة ("FID") + 1
GenerateFID = الجلسة("FID")
وظيفة النهاية
(3) تسجيل النموذج المقدم
عندما يتم إرسال النموذج بنجاح، قم بتسجيل المعرف الفريد الخاص به في كائن القاموس:
Sub RegisterFID().
خافت strFID
تهيئةFID
strFID = طلب("FID")
جلسة ("FIDlist"). أضف strFID، الآن ()
End Sub
(4) تحقق مما إذا كان النموذج قد تم إرساله بشكل متكرر
قبل المعالجة الرسمية للنموذج المقدم من قبل المستخدم، يجب عليك التحقق مما إذا كان قد تم تسجيل FID الخاص به في كائن القاموس. يتم استخدام الدالة CheckFID() التالية لإكمال هذا العمل إذا تم تسجيلها، فإنها ترجع FALSE، وإلا فإنها ترجع TRUE:
Function CheckFID().
خافت strFID
تهيئةFID
strFID = طلب("FID")
CheckFID = ليست جلسة ("FIDlist"). موجود (strFID)
الوظيفة النهائية
2. كيفية الاستخدام
هناك مكانان يتم استخدام الوظيفة المذكورة أعلاه فيهما، وهما عند إنشاء النموذج وعند معالجة النتائج. افترض أنه تم وضع الإجراءات الفرعية الأربعة المذكورة أعلاه في الملف المضمن Forms.inc. يحدد التعليمة البرمجية التالية ما إذا كان سيتم إنشاء نموذج أو معالجة نتائج النموذج بناءً على قيمة FID. تعتبر عملية المعالجة التي يصفها مناسبة لمعظم تطبيقات ASP:
< %الخيار الصريح%>
< !--#include file="forms.inc"-->
<HTML>
<الرأس>
<TITLE>اختبار إرسال النموذج</TITLE>
/ رأس
<الجسم>
<%
إذا كان الطلب ("FID") = "" إذن
GenerateForm
آخر
نموذج العملية
نهاية إذا
%>
</الجسم>
< /HTML>
GenerateForm هو المسؤول عن إنشاء النموذج، الذي يجب أن يحتوي على FID مخفي، مثل:
< %
نموذج فرعي ()
%>
< إجراء النموذج = "< %=Request.ServerVariables("PATH_INFO")%>" طريقة=GET>
< نوع الإدخال=اسم مخفي=قيمة FID==GenerateFID()%>">
<نوع الإدخال = اسم النص = "param1" القيمة = "">
< نوع الإدخال = قيمة الإرسال = "موافق" >
</النموذج>
<%
نهاية الفرعية
%>
ProcessForm هو المسؤول عن معالجة المحتوى المقدم من خلال النموذج، ولكن قبل المعالجة، يجب استدعاء CheckFID () للتحقق مما إذا كان النموذج الحالي قد تم إرساله أم لا، الرمز كما يلي:
< %.
نموذج العملية الفرعية ()
إذا CheckFID() ثم
Response.اكتب "ما أدخلته هو" & Request.QueryString("param1")
سجلFID
آخر
Response.اكتب "لا يمكن تقديم هذا النموذج إلا مرة واحدة!"
نهاية إذا
نهاية الفرعية
%>
3. القيود وإجراءات التحسين
قدمنا أعلاه طريقة للحد من إرسال نفس النموذج عدة مرات خلال الجلسة الحالية. في التطبيقات العملية، قد يلزم إجراء تحسينات في العديد من الجوانب، على سبيل المثال:
⑴ التحقق من قانونية البيانات التي أدخلها المستخدم قبل تسجيل معرف النموذج، بحيث عندما تكون البيانات غير قانونية، يمكن للمستخدم الضغط على زر "رجوع" زر للعودة وإرسال نفس النموذج مرة أخرى بعد التصحيح.
⑵ هذا القيد على إرسال النموذج صالح فقط لمدة الجلسة الحالية على الأكثر. إذا كان هذا التقييد مطلوبًا ليشمل جلسات متعددة، فسيتم استخدام ملفات تعريف الارتباط أو قاعدة البيانات لحفظ البيانات ذات الصلة.