تقدم هذه المقالة أسلوبًا بسيطًا في تطبيقات ASP لمنع المستخدمين من إرسال نفس النموذج عدة مرات أثناء الجلسة الحالية. وهو يتألف بشكل أساسي من أربعة إجراءات فرعية، وفي التطبيقات الأبسط، ما عليك سوى وضع هذه الرموز في الملفات المضمنة والرجوع إليها مباشرةً في البيئات الأكثر تعقيدًا، وسنقدم بعض اقتراحات التحسين في نهاية المقالة.
1. عملية العمل الأساسية
أدناه نناقش هذه الإجراءات الفرعية الأربعة على التوالي.
(1) التهيئة
نحتاج هنا إلى حفظ متغيرين في كائن الجلسة، من بينهما:
⑴ يتوافق كل نموذج مع معرف فريد يسمى FID، ويتم استخدام عداد لجعل القيمة فريدة.
⑵ عندما يتم إرسال النموذج بنجاح، يجب تخزين FID الخاص به في كائن القاموس.
نحن نستخدم عملية مخصصة لتهيئة البيانات المذكورة أعلاه. على الرغم من أنه سيتم استدعاؤه بواسطة كل روتين فرعي في المستقبل، إلا أنه في الواقع يتم تنفيذه مرة واحدة فقط في كل جلسة:
SubInitializeFID()
إذا لم يكن IsObject(Session(FIDList)) إذن
تعيين الجلسة (FIDList) = Server.CreateObject (Scripting.Dictionary)
الجلسة (FID) = 0
نهاية إذا
نهاية الفرعية
(2) قم بإنشاء معرف فريد للنموذج
يتم استخدام الدالة التالية GenerateFID() لإنشاء معرف فريد للنموذج. تقوم الدالة أولاً بزيادة قيمة FID بمقدار 1 ثم تقوم بإرجاعها:
وظيفة إنشاء FID ()
تهيئةFID
الجلسة (FID) = الجلسة (FID) + 1
GenerateFID = الجلسة (FID)
وظيفة النهاية
(3) استمارة التسجيل المقدمة
عندما يتم إرسال النموذج بنجاح، يتم تسجيل معرفه الفريد في كائن القاموس:
تسجيل فرعيFID()
خافت strFID
تهيئةFID
strFID = طلب(FID)
جلسة (FIDlist). أضف strFID، الآن ()
نهاية الفرعية
(4) تحقق مما إذا كان النموذج قد تم تقديمه بشكل متكرر
قبل معالجة النموذج المقدم من قبل المستخدم رسميًا، يجب عليك التحقق مما إذا كان قد تم تسجيل FID الخاص به في كائن القاموس. يتم استخدام الدالة CheckFID() التالية لإكمال هذا العمل إذا تم تسجيلها، فإنها تُرجع FALSE، وإلا فإنها تُرجع TRUE:
فحص الوظيفةFID()
خافت 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()%>>
<نوع الإدخال=اسم النص=قيمة المعلمة1=>
<نوع الإدخال=قيمة الإرسال=موافق>
</النموذج>
<%
نهاية الفرعية
%>
يعتبر ProcessForm مسؤولاً عن معالجة المحتوى المقدم من خلال النموذج، ولكن قبل المعالجة، يجب عليك الاتصال بـ CheckFID() للتحقق مما إذا كان النموذج الحالي قد تم إرساله أم لا. الرمز كما يلي:
<%
نموذج العملية الفرعية ()
إذا CheckFID() ثم
Response.اكتب ما أدخلته هو & Request.QueryString(param1)
سجلFID
آخر
Response.اكتب هذا النموذج يمكن إرساله مرة واحدة فقط!
نهاية إذا
نهاية الفرعية
%>
3. القيود وتدابير التحسين
لقد قدمنا أعلاه طريقة للحد من إرسال نفس النموذج عدة مرات خلال الجلسة الحالية. في التطبيقات العملية، قد يلزم إجراء تحسينات في العديد من الجوانب، مثل:
⑴ تحقق من قانونية البيانات التي أدخلها المستخدم قبل تسجيل معرف النموذج، بحيث عندما تكون البيانات غير قانونية، يمكن للمستخدم الضغط على زر الرجوع للعودة وإرسال نفس النموذج مرة أخرى بعد التصحيح.
⑵ هذا القيد على إرسال النموذج صالح فقط لمدة الجلسة الحالية على الأكثر. إذا كان هذا التقييد مطلوبًا ليشمل جلسات متعددة، فسيتم استخدام ملفات تعريف الارتباط أو قاعدة البيانات لحفظ البيانات ذات الصلة.
⑶ هذه الطريقة غير آمنة. يتم استخدامه فقط لمنع سوء الاستخدام ولا يمنع المستخدمين المهرة من إرسال نفس النموذج عدة مرات عمدًا.