แนะนำ: ASP หลายวิธีการสืบค้น เรามักจะพบปัญหาการสืบค้นหลายครั้งและข้อความ SQL ที่ยาวนานมักจะทำให้พระสับสน โดยเฉพาะอย่างยิ่งเมื่อไคลเอ็นต์ส่วนเติมเต็มในเงื่อนไขการสืบค้นมันจะยากกว่าที่จะใช้วิธีการทั่วไป ต่อไปนี้ใช้ตัวตนอย่างชาญฉลาดโดยที่ 1 = 1 (อันที่จริงมันมีมากเพียงแค่ปล่อยให้มันมีค่าของความจริง) เพื่อแก้ปัญหานี้ TEXT SUMMARY 'TITLE TITLE'COM
จะ จำกัด การส่งแบบฟอร์มซ้ำหลายครั้งใน ASP ได้อย่างไร บนอินเทอร์เน็ตเราพบรูปแบบที่นับไม่ถ้วนทุกวันและเรายังเห็นว่าส่วนใหญ่ไม่ได้ จำกัด ผู้ใช้จากการส่งแบบฟอร์มเดียวกันหลายครั้ง การขาดข้อ จำกัด ดังกล่าวบางครั้งอาจให้ผลลัพธ์ที่ไม่คาดคิดเช่นการสมัครสมาชิกซ้ำไปยังบริการอีเมลหรือการลงคะแนนซ้ำ
บทความนี้อธิบายวิธีง่ายๆในการป้องกันไม่ให้ผู้ใช้ส่งแบบฟอร์มเดียวกันหลายครั้งในระหว่างเซสชันปัจจุบันในแอปพลิเคชัน ASP ส่วนใหญ่ประกอบด้วยรูทีนย่อยสี่รูต ในแอปพลิเคชันที่ง่ายกว่าคุณเพียงแค่วางรหัสเหล่านี้ในไฟล์รวมและอ้างอิงโดยตรง สำหรับสภาพแวดล้อมที่ซับซ้อนยิ่งขึ้นเราจะให้คำแนะนำการปรับปรุงบางอย่างในตอนท้ายของบทความ
1. กระบวนการทำงานขั้นพื้นฐาน
ต่อไปเราจะหารือเกี่ยวกับรูทีนย่อยทั้งสี่นี้
(ASP จำกัด การส่งแบบฟอร์มซ้ำหลายครั้ง) การเริ่มต้น
ที่นี่เราต้องการบันทึกตัวแปรสองตัวในวัตถุเซสชันซึ่ง:
⑴แต่ละแบบฟอร์มสอดคล้องกับตัวระบุที่ไม่ซ้ำกันที่เรียกว่า FID และตัวนับจะใช้เพื่อทำให้ค่านี้ไม่ซ้ำกัน
⑵เมื่อใดก็ตามที่มีการส่งแบบฟอร์มสำเร็จ FID ของมันจะต้องถูกเก็บไว้ในวัตถุพจนานุกรม
เราใช้กระบวนการเฉพาะเพื่อเริ่มต้นข้อมูลข้างต้น แม้ว่ารูทีนย่อยแต่ละรายการจะเรียกมันว่าในอนาคต แต่จริง ๆ แล้วมันจะถูกดำเนินการเพียงครั้งเดียวในแต่ละเซสชั่น:
ต่อไปนี้เป็นเนื้อหาที่ยกมา: sub initializefid () ถ้าไม่ใช่ isObject (เซสชัน (fidlist)) แล้ว ตั้งค่าเซสชัน (fidlist) = server.createObject (scripting.dictionary) เซสชัน (fid) = 0 สิ้นสุดถ้า สิ้นสุดย่อย |
(จำกัด การส่งแบบฟอร์มซ้ำหลายครั้งใน ASP) ตัวระบุที่ไม่ซ้ำกันสำหรับการสร้างแบบฟอร์ม
ฟังก์ชั่นต่อไปนี้ generateFid () ใช้เพื่อสร้างธงที่ไม่ซ้ำกันสำหรับแบบฟอร์ม ฟังก์ชั่นแรกเพิ่มค่า FID โดย 1 จากนั้นส่งคืน:
ต่อไปนี้เป็นเนื้อหาที่ยกมา: ฟังก์ชั่น generateFid () Initializefid เซสชัน (fid) = เซสชัน (fid) 1 generateFid = เซสชัน (fid) ฟังก์ชันสิ้นสุด |
(การส่งแบบฟอร์มที่ จำกัด ซ้ำหลายครั้งใน ASP) ลงทะเบียนแบบฟอร์มที่ส่ง
เมื่อส่งแบบฟอร์มสำเร็จตัวระบุที่ไม่ซ้ำกันจะถูกลงทะเบียนในวัตถุพจนานุกรม:
ต่อไปนี้เป็นเนื้อหาที่ยกมา: sub registerfid () สลัว strfid Initializefid strfid = คำขอ (fid) เซสชั่น (fidlist). เพิ่ม strfid, ตอนนี้ () สิ้นสุดย่อย |
(ASP จำกัด การส่งแบบฟอร์มซ้ำหลายครั้ง 4) ตรวจสอบว่ามีการส่งแบบฟอร์มซ้ำแล้วซ้ำอีก
ก่อนที่จะประมวลผลแบบฟอร์มที่ส่งโดยผู้ใช้อย่างเป็นทางการคุณควรตรวจสอบว่า FID นั้นลงทะเบียนในวัตถุพจนานุกรมหรือไม่ ฟังก์ชั่น checkfid () ต่อไปนี้ใช้เพื่อทำงานนี้ให้เสร็จสมบูรณ์ หากมีการลงทะเบียนแล้วจะส่งกลับเท็จมิฉะนั้นจะส่งคืนจริง:
ต่อไปนี้เป็นเนื้อหาที่ยกมา: ฟังก์ชั่น checkfid () สลัว strfid Initializefid strfid = คำขอ (fid) checkfid = not session (fidlist) .exists (strfid) ฟังก์ชันสิ้นสุด |
2. วิธีใช้
มีสองสถานที่ที่ใช้ฟังก์ชั่นข้างต้นคือเมื่อการสร้างแบบฟอร์มและการประมวลผลผลลัพธ์ สมมติว่ารูทีนย่อยสี่เส้นข้างต้นได้ถูกนำไปใส่ในรูปแบบไฟล์รวมรหัสต่อไปนี้จะตัดสินใจว่าจะสร้างแบบฟอร์มหรือประมวลผลผลลัพธ์แบบฟอร์มตามค่า FID กระบวนการประมวลผลที่อธิบายนั้นเหมาะสำหรับแอปพลิเคชัน ASP ส่วนใหญ่:
ต่อไปนี้เป็นเนื้อหาที่ยกมา: < %ตัวเลือกชัดเจน %> <!-#รวมไฟล์ = forms.inc <html> <head> <title> การทดสอบการส่งแบบฟอร์ม </title> </head <body> - หากคำขอ (fid) = จากนั้น สร้างรูปแบบ อื่น รูปทรง สิ้นสุดถ้า - </body> </html> |
GenerateForm มีหน้าที่ในการสร้างแบบฟอร์มและแบบฟอร์มควรมี FID ที่ซ่อนอยู่เช่น:
ต่อไปนี้เป็นเนื้อหาที่ยกมา: - sub generateForm () - <form action = < %= request.ServerVariables (path_info) %> method = get> <ประเภทอินพุต = ชื่อที่ซ่อน = ค่า fid = < %= generateFid () %>> <ประเภทอินพุต = ชื่อข้อความ = param1 value => <ประเภทอินพุต = ส่งค่า = ตกลง> </form> - สิ้นสุดย่อย - |
ProcessForm มีหน้าที่รับผิดชอบในการประมวลผลเนื้อหาที่ส่งผ่านแบบฟอร์ม แต่ก่อนการประมวลผลควรโทร CheckFid () ก่อนเพื่อตรวจสอบว่ามีการส่งแบบฟอร์มปัจจุบันหรือไม่ คลาสโค้ดเป็นเช่น:
ต่อไปนี้เป็นเนื้อหาที่ยกมา: - Sub ProcessForm () ถ้า checkfid () แล้ว Response.write สิ่งที่คุณพิมพ์คือ |
แบ่งปัน: จะสร้าง HTML ใน ASP ได้อย่างไร? มีระบบข่าวมากมายที่สร้าง HTML แต่พวกเขาทั้งหมดใช้เทมเพลต ฟังก์ชั่นนี้บันทึกรหัส HTML ที่สร้างขึ้นโดยหน้า ASP เป็นไฟล์ HTML ดังนั้นจึงไม่จำเป็นต้องเปลี่ยนหน้าต้นฉบับเพื่อให้ระบบข่าวที่สร้าง HTML สมบูรณ์ ^ _^ เนื่องจากรหัสค่อนข้างสั้นเนื้อหาที่ยกมาต่อไปนี้ไม่ได้แสดงความคิดเห็นที่นี่: % 'เมื่อเป้าหมาย