คอลัมน์เสียงสนับสนุนของ.NET ASP
การแก้ไขปัญหาการรับรองความถูกต้องของฟอร์ม
เมื่อต้องการกำหนดคอลัมน์นี้กับความต้องการของคุณ เราต้องเชิญคุณสามารถส่งแนวคิดของคุณเกี่ยวกับหัวข้อที่สนใจของคุณและการตัดสินค้าจากคลังที่คุณต้องการดู ได้รับการจัดการในอนาคตบทความในฐานความรู้และคอลัมน์เสียงสนับสนุน คุณสามารถส่งความคิดและคำติชมโดยใช้แบบฟอร์มสอบถามสำหรับแฟ้มของคุณ นอกจากนี้ยังมีการเชื่อมโยงไปยังแบบฟอร์มที่ด้านล่างของคอลัมน์นี้
ยินดีต้อนรับสู่คอลัมน์เสียงสนับสนุน ASP.NET ชื่อของฉันคือ Jerry Orman ฉันได้กับ Microsoft เกิน 5 ปี และใช้เวลาของฉันมุ่งเน้นเทคโนโลยีที่เกี่ยวข้องกับเว็บเช่น Microsoft FrontPage และเทคโนโลยี Microsoft SharePoint ใหม่ส่วนใหญ่ ฉันได้ใช้ปีสุดท้ายที่ทำงานกับ Microsoft ASP.NET เป็นวิศวกรฝ่ายสนับสนุน เดือนนี้ในคอลัมน์เสียงสนับสนุน ที่จะอธิบายถึงวิธีการแก้ไขปัญหาการรับรองความถูกต้องของแบบฟอร์มใน Microsoft ASP.NET
การแก้ไขปัญหาการรับรองความถูกต้องของฟอร์ม
เมื่อคุณใช้การรับรองความถูกต้องของฟอร์มในโปรแกรมประยุกต์ ASP.NET คุณอาจพบว่าจำเป็นต้องแก้ไขปัญหาที่เกิดขึ้นเมื่อผู้ใช้ถูกเปลี่ยนเส้นทางไปยังหน้าการเข้าสู่ระบบแบบสุ่ม ในโลกเหมาะสมที่สุด ปัญหานี้จะเกิดขึ้นในลักษณะที่จะช่วยให้คุณแนบดีบักเกอร์ และปัญหาการจับภาพได้อย่างง่ายดายขึ้น ในสภาพแวดล้อมการผลิต อย่างไรก็ตาม ซึ่งจะไม่ค่อยมีกรณี เมื่อต้องการแก้ไขปัญหาแบบสุ่มจลักษณะนี้ คุณจำเป็นต้องบันทึกข้อมูลที่เกี่ยวข้องกับปัญหาเพื่อให้คุณสามารถจำกัดลงสาเหตุราก
ในคอลัมน์นี้ เราจะครอบคลุมแนวคิดเกี่ยวกับการรับรองความถูกต้องของฟอร์มสั้น ๆ แล้วเราจะมีลักษณะเป็นสถานการณ์สมมติที่ทำให้ผู้ใช้มีการเปลี่ยนเส้นทางไปยังหน้าการเข้าสู่ระบบและวิธีการจัดให้มีข้อมูลที่เกี่ยวข้องกับการแยกปัญหา นอกจากนี้เรายังจะครอบคลุมวิธีการใช้อินเทอร์เฟซของ IHttpModule เมื่อต้องการบันทึกข้อมูลการรับรองความถูกต้องของฟอร์มภาพรวมการรับรองความถูกต้องของฟอร์ม
เมื่อผู้ใช้รับรองความถูกต้องไปยังเว็บไซต์ โดยใช้การรับรองความถูกต้องของฟอร์ม เซิร์ฟเวอร์ที่สร้างคุกกี้ ค่าของคุกกี้คือ บัตรการรับรองความถูกต้องแบบฟอร์มที่เข้ารหัสลับ คุกกี้จะถูกส่งผ่านไปยังเซิร์ฟเวอร์ในการร้องขอแต่ละแอพลิเคชัน และคลาFormsAuthenticationModule decrypts ค่าคุกกี้ และกำหนดว่า ผู้ใช้ที่ถูกต้อง หรือไม่
โดยค่าเริ่มต้น คลาFormsAuthenticationModuleถูกเพิ่มในไฟล์ Machine.config คลาFormsAuthenticationModuleการจัดการกระบวนการ FormsAuthentication ต่อไปนี้คือ รายการจากแฟ้ม Machine.config:<httpModule> …other modules…
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" /> …other modules… </httpModule>
รับส่งข้อมูล HTTP ทั่วไปสำหรับการรับรองความถูกต้องโดยใช้การรับรองความถูกต้องของแบบฟอร์มมีลักษณะคล้ายกับต่อไปนี้:
-
ไคลเอ็นต์ส่ง HTTP ได้รับการ Default.aspx ไม่มีคุกกี้รับรองความถูกต้องของฟอร์มจะถูกส่ง
-
เซิร์ฟเวอร์ส่งการตอบสนอง 302 (เปลี่ยนเส้นทาง) ที่ Login.aspx
-
ไคลเอนต์ส่ง HTTP POST ผิดไป Login.aspx ซึ่งจะรวมถึงข้อมูลการเข้าสู่ระบบ
-
เซิร์ฟเวอร์ส่งการตอบสนอง 302 (เปลี่ยนเส้นทาง) ที่ Default.aspx คุกกี้การรับรองความถูกต้องแบบฟอร์มจะรวมอยู่ด้วย
-
ไคลเอ็นต์ส่ง HTTP ได้รับการ Default.aspx ซึ่งรวมถึงคุกกี้รับรองความถูกต้องของฟอร์ม
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ และการใช้การรับรองความถูกต้องของฟอร์ม แวะไปที่เว็บไซต์ต่อไปนี้:
http://msdn2.microsoft.com/en-us/library/7t6b43z4.aspx
http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthentication(vs.71).aspx
http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthenticationticket(vs.71).aspxสำหรับข้อมูลเพิ่มเติมเกี่ยวกับคุกกี้การรับรองความถูกต้องของฟอร์มที่ใช้งานร่วมกัน เยี่ยมชม ASP.NET เว็บไซต์ต่อไปนี้:
http://quickstarts.asp.net/QuickStartv20/aspnet/doc/security/formsauth.aspx
เหตุผลที่ว่า ผู้ใช้อาจถูกเปลี่ยนเส้นทางไปยังหน้าการเข้าสู่ระบบ
คุกกี้การรับรองความถูกต้องแบบฟอร์มหายไป
สถานการณ์สมมติที่ 1
ในสถานการณ์สมมตินี้ ผู้ใช้ล็อกออนที่เว็บไซต์ ในบางกรณี ไคลเอนต์ส่งคำขอไปยังเซิร์ฟเวอร์ และ คลาFormsAuthenticationModuleไม่ได้รับคุกกี้ คุณสามารถกำหนดว่าถ้าคำขอของผู้ใช้ไม่ประกอบด้วยคุกกี้เปิดใช้งานการเข้าสู่ระบบใน Microsoft Internet Information Services (IIS) ของคุกกี้ เมื่อต้องการทำเช่นนี้ ให้ทำตามขั้นตอนเหล่านี้:
-
เปิดที่ IIS Microsoft Management Console (MMC)
-
คลิกขวาเว็บไซต์ แล้ว คลิ ก
คุณสมบัติ -
คลิกที่แท็บเว็บไซต์แล้ว คลิ กเปิดใช้งานการเข้าสู่ระบบ
-
ตรวจสอบให้แน่ใจว่า รูปแบบแฟ้มบันทึกW3C ขยายรูปแบบแฟ้มบันทึก
-
คลิก คุณสมบัติ
-
คลิกแท็บขั้นสูงและคลิก
คุณสมบัติเพิ่มเติม -
ภายใต้คุณสมบัติที่ขยายคลิกเพื่อเลือกกล่องกาเครื่องหมายCookie(cs(Cookie))และReferer (cs(Referer))กล่องกาเครื่องหมาย
หลังจากที่ปัญหานี้เกิดขึ้น กำหนดไคลเอนต์ใดที่มีปัญหาและที่อยู่ IP ของไคลเอ็นต์ กรองบันทึก IIS บนที่อยู่ IP ของไคลเอนต์ และดูคอลัมน์ <คุกกี้>
หมายเหตุ คุณสามารถใช้ตัวแยกวิเคราะห์แฟ้มบันทึกการแยกวิเคราะห์แฟ้มบันทึก IIS เมื่อต้องการดาวน์โหลดตัวแยกวิเคราะห์แฟ้มบันทึก แวะไปที่เว็บไซต์ต่อไปนี้ของ Microsoft:http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07หลังจากที่คุณมีรายการของการร้องขอจากผู้ใช้ที่เฉพาะเจาะจง ค้นหาร้องขอไปยังหน้าการเข้าสู่ระบบ คุณทราบถูกเปลี่ยนเส้นทางไปยังหน้านี้ และคุณต้องการดูคำขอก่อนที่การเปลี่ยนเส้นทางเกิดขึ้น ถ้าคุณเห็นบางสิ่งบางอย่าง คล้ายกับต่อไปนี้ ไคลเอนต์อย่างใดอย่างหนึ่งไม่ได้ส่งคุกกี้ หรือคุกกี้ถูกเอาออกในเครือข่ายระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ นี่เป็นการเข้าสู่ระบบเริ่มต้น
วิธีการ |
หน้า |
การตอบสนอง |
คุกกี้ |
รับ |
/Default.aspx |
302 (เปลี่ยนเส้นทาง) |
ไม่มีคุกกี้ |
รับ |
/Login.aspx |
200 (สำเร็จ) |
ไม่มีคุกกี้ |
ประกาศ |
/Login.aspx |
302 (เปลี่ยนเส้นทาง) |
ไม่มีคุกกี้ |
รับ |
/Default.aspx |
200 (สำเร็จ) |
.ASPXAUTH |
รับ |
/SomePage.aspx |
302 (เปลี่ยนเส้นทาง) |
ไม่ใช่ ASPXAUTH คุกกี้ |
เหล่านี้คือคำขออื่น ๆ ตาม ด้วยการร้องขอไปยังหน้าบนไซต์ได้โดยไม่ต้องการ ASPXAUTH คุกกี้
วิธีการ |
หน้า |
การตอบสนอง |
คุกกี้ |
รับ |
/SomePage.aspx |
302 (เปลี่ยนเส้นทาง) |
ไม่ใช่ ASPXAUTH คุกกี้ |
รับ |
/Login.aspx |
200 (สำเร็จ) |
ไม่ใช่ ASPXAUTH คุกกี้ |
ประกาศ |
/Login.aspx |
302 (เปลี่ยนเส้นทาง) |
ไม่ใช่ ASPXAUTH คุกกี้ |
รับ |
/SomePage.aspx |
200 (สำเร็จ) |
.ASPXAUTH |
หมายเหตุ การร้องขอแรกจากผู้ใช้ที่ไม่น่าจะมีคุกกี้รับรองความถูกต้องแบบฟอร์มยกเว้นว่าคุณกำลังสร้างคุกกี้แบบถาวร บันทึก IIS จะแสดงเฉพาะคุณคุกกี้ที่ได้รับในการร้องขอ การร้องขอแรกมีคุกกี้การรับรองความถูกต้องแบบฟอร์มจะเปิดคำขอหลังจากความพยายามเข้าสู่ระบบเรียบร้อยแล้ว
สถานการณ์สมมติ 2
คุกกี้การรับรองความถูกต้องแบบฟอร์มยังอาจหายไปเมื่อเกินขีดจำกัดของคุกกี้ของไคลเอ็นต์ ใน Microsoft Internet Explorer มีขีดจำกัดของคุกกี้ 20 หลังจากสร้างคุกกี้ 000520-345 บนไคลเอนต์ คุกกี้ก่อนหน้าจะถูกเอาออกจากคอลเลกชันของไคลเอ็นต์ ถ้าอยู่ ASPXAUTH คุกกี้จะถูกลบออก ผู้ใช้จะถูกเปลี่ยนเส้นทางไปยังหน้าการเข้าสู่ระบบเมื่อมีการประมวลผลการร้องขอถัดไป คุณสามารถแก้ไขสถานการณ์สมมติสองเหล่านี้ได้ในลักษณะเดียวกัน ค้นหาที่ร้องขอการเปลี่ยนเส้นทางไปยังหน้าการเข้าสู่ระบบก่อน หากการร้องขอไปยังเพจนี้สร้างคุกกี้ ซึ่งจะมีบางสิ่งบางอย่างเพื่อตรวจสอบ สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
306070จำนวนและขนาดจำกัดของคุกกี้ใน Internet Explorer คุณสามารถใช้ Fiddler เพื่อดูส่วนหัว HTTP ที่ถูกส่งไปยังไคลเอนต์ หลังจากที่คุณจับภาพปริมาณการใช้งาน คลิกสองครั้งที่คำขอ และจากนั้น คลิกที่หัวข้อเพื่อดูหัวข้อการตั้งค่าคุกกี้ ถ้าคุณติดตามการเข้าสู่ระบบเรียบร้อยแล้ว คุณจะเห็นส่วนหัวของคุกกี้ชุดในการตอบสนองของการเข้าสู่ระบบเรียบร้อยแล้ว เมื่อต้องการดาวน์โหลด Fiddler เยี่ยมชม Fiddler เว็บไซต์ต่อไปนี้:
สถานการณ์สมมติ 3
หลังจากการร้องขอออกจากไคลเอนต์ มีชั้นต่าง ๆ ที่สามารถส่งผลกระทบต่อแพคเก็ตที่จะส่ง เพื่อตรวจสอบถ้าอุปกรณ์เครือข่ายเอาคุกกี้ คุณจำเป็นต้องจับตรวจสอบเครือข่ายบนไคลเอนต์และเซิร์ฟเวอร์ แล้ว มองหาในเนื้อความของการร้องขอสำหรับคุกกี้ คุณต้องการดูคำขอของไคลเอนต์เพื่อให้แน่ใจว่า คุกกี้ถูกส่งไป และตรวจสอบการสืบค้นกลับของเซิร์ฟเวอร์เพื่อให้แน่ใจว่า เซิร์ฟเวอร์ได้รับคุกกี้ การร้องขอของไคลเอ็นต์ นี่คือคำขอรับหลังจากที่ผู้ใช้ได้รับการรับรอง ข้อมูลบัตรการรับรองความถูกต้องแบบฟอร์มจะถูกเน้นเป็นสีน้ำเงิน ยืนยันว่า ข้อมูลคุกกี้ออกจากไคลเอนต์ เมื่อคุณใช้จับเครื่องมือเครือข่าย เช่น Netmon คุณเห็นปริมาณการใช้งานที่จริง ไปถึงอะแดปเตอร์
47 45 54 20 68 74 74 70-3a 2f 2f 6c 6f 63 61 6c GET http://local68 6f 73 74 2f 46 6f 72-6d 73 41 75 74 68 4c 6f host/FormsAuthLo
67 54 65 73 74 2f 57 65-62 46 6f 72 6d 31 2e 61 gTest/WebForm1.a 73 70 78 20 48 54 54 50-2f 31 2e 31 0d 0a 41 63 spx HTTP/1.1..Ac 63 65 70 74 3a 20 69 6d-61 67 65 2f 67 69 66 2c cept: image/gif, …Other headers of the GET request… 63 68 65 0d 0a 43 6f 6f-6b 69 65 3a 20 2e 41 53 che..Cookie: .AS 50 58 41 55 54 48 3d 33-43 45 46 39 42 39 41 30 PXAUTH=3CEF9B9A0 43 33 37 41 44 46 36 33-45 36 42 44 33 37 42 36 C37ADF63E6BD37B6 39 43 44 41 32 35 30 30-30 46 38 30 37 32 38 46 9CDA25000F80728F 35 31 43 39 35 36 36 44-31 34 43 35 34 31 34 35 51C9566D14C54145 38 31 43 39 33 45 32 41-30 31 44 44 43 44 45 46 81C93E2A01DDCDEF 32 34 41 31 37 34 32 39-34 31 30 43 30 39 37 34 24A17429410C0974 42 33 45 43 42 30 36 34-32 32 38 45 33 35 33 39 B3ECB064228E3539 39 41 38 32 32 42 33 42-39 33 36 44 46 30 38 46 9A822B3B936DF08F 42 41 42 44 33 45 31 30-32 44 30 30 32 31 30 43 BABD3E102D00210C 32 45 31 33 39 38 30 37-39 42 32 33 35 32 39 46 2E1398079B23529F 34 46 35 44 37 34 41 3b-20 50 72 6f 66 69 6c 65 4F5D74A; Profile 3d 56 69 73 69 74 6f 72-49 64 3d 62 32 34 65 62 =VisitorId=b24eb
ขอฝั่งเซิร์ฟเวอร์
เมื่อคุณดูที่ร้องขอที่เข้าถึงเซิร์ฟเวอร์ คุณต้องตรวจสอบให้แน่ใจว่า เซิร์ฟเวอร์ได้รับข้อมูลเดียวกันที่ส่งไปยังไคลเอนต์ ถ้าเซิร์ฟเวอร์ไม่ได้รับข้อมูลเดียวกัน คุณจำเป็นต้องตรวจสอบอุปกรณ์อื่น ๆ บนเครือข่ายเพื่อตรวจสอบที่คุกกี้จะถูกเอาออก หมายเหตุ นอกจากนี้ยังมีอินสแตนซ์ของตัวกรอง ISAPI เอาคุกกี้ ถ้าคุณยืนยันว่า เว็บเซิร์ฟเวอร์ได้รับคุกกี้ แต่ไม่มีอยู่ในแฟ้มบันทึก IIS คุกกี้ ตรวจสอบตัวกรอง ISAPI คุณอาจต้องเอาตัวกรองเมื่อต้องการดูถ้าจะแก้ปัญหาบัตรการรับรองความถูกต้องของฟอร์มหมดเวลา
สาเหตุทั่วไปอื่น ๆ สำหรับผู้ใช้ที่จะถูกเปลี่ยนเส้นทางคือ ถ้าบัตรการรับรองความถูกต้องของฟอร์มหมดอายุแล้ว บัตรการรับรองความถูกต้องของฟอร์มสามารถหมดเวลาสองวิธี สถานการณ์สมมติแรกเกิดขึ้นถ้าคุณใช้หมดอายุสัมบูรณ์ มีวันหมดอายุสัมบูรณ์ บัตรการรับรองความถูกต้องหมดอายุเมื่อหมดเวลาหมดอายุ ตัวอย่างเช่น คุณตั้งค่าวันหมดอายุเป็น 20 นาที และผู้เยี่ยมชมไซต์ที่ 2:00 น. ผู้ใช้จะถูกเปลี่ยนเส้นทางไปยังหน้าการเข้าสู่ระบบถ้าผู้เยี่ยมชมไซต์หลังจาก 2:20 PM
ถ้าคุณใช้แถบเลื่อนหมดอายุ สถานการณ์จำลองเป็นเรื่องยุ่งยากมากกว่าสักเล็กน้อย คุกกี้และตั๋วโดยสารเป็นผลลัพธ์ถูกปรับปรุงถ้าผู้เยี่ยมชมไซต์หลังจากเวลาหมดอายุจะหมดอายุครึ่ง ตัวอย่าง คุณตั้งค่าวันหมดอายุที่ 20 นาที โดยใช้แถบเลื่อนหมดอายุ ผู้เยี่ยมชมไซต์ที่ 2:00 น. และผู้ใช้ได้รับคุกกี้ที่ถูกตั้งค่าให้หมดอายุเวลา 2:20 PM การหมดอายุเท่านั้นได้รับการปรับปรุงถ้าผู้เยี่ยมชมไซต์หลังจาก 2:10 PM ถ้าผู้เยี่ยมชมไซต์ที่ 2:09 PM ตั๋วโดยสารจะไม่ปรับปรุงเนื่องจากครึ่งหนึ่งของเวลาหมดอายุไม่ผ่าน ถ้าผู้ใช้แล้วรอ 12 นาที การเยี่ยมชมไซต์ที่ 2:21 PM ระบบจะหมดอายุตั๋วโดยสาร ผู้ใช้ถูกเปลี่ยนเส้นทางไปยังหน้าการเข้าสู่ระบบ วิธีหนึ่งในวิธีการนี้ชนิดของปัญหาที่เป็นการ เข้าสู่ฟอร์มคุกกี้และบัตรข้อมูล ด้วยวิธีนี้ คุณสามารถดูถ้าคุกกี้ได้รับ โดย IIS และค่าเหล่านั้น คุณสามารถทำเช่นนี้ได้ โดยการเขียนผิดHttpModuleแล้ว เสียบโมดูลนั้นไปป์ไลน์การร้องขอ คุณจะไม่ได้มีการปรับเปลี่ยนรหัสโปรแกรมประยุกต์ของคุณเพื่อรับข้อมูลที่คุณต้องการ ตัวอย่างแนบมาทำงานใน Microsoft .NET Framework 1.1 และ.NET Framework 2.0 และมีข้อคิดเห็นทั้งหมด ตัวอย่างประกอบด้วยแฟ้มต่อไปนี้:หมายเหตุฉันจะให้การเชื่อมโยงดาวน์โหลดสำหรับรหัสที่ระบุในแฟ้ม FormsAuthLogger.zip ฉันจะชี้ออกพื้นที่หลักที่นี่:ขอให้สำหรับนั้นแบบฟอร์ม
เป็นเสมอ รู้สึกฟรีเพื่อส่งความคิดเห็นบนหัวข้อคุณต้องได้รับการจัดการในอนาคตคอลัมน์ หรือ ในฐานข้อมูลองค์ความรู้ใช้ใน