ไฟล์ Global.asax บางครั้งเรียกว่าไฟล์แอปพลิเคชัน ASP.NET ให้ตำแหน่งศูนย์กลางเพื่อตอบสนองต่อเหตุการณ์ระดับแอปพลิเคชันหรือระดับโมดูล คุณสามารถใช้ไฟล์นี้เพื่อปรับใช้การรักษาความปลอดภัยของแอปพลิเคชันและงานอื่นๆ
ไฟล์ Global.asax ได้รับการกำหนดค่าเพื่อให้คำขอ HTTP โดยตรง (ผ่าน URL) ถูกปฏิเสธโดยอัตโนมัติ ดังนั้นผู้ใช้จึงไม่สามารถดาวน์โหลดหรือดูเนื้อหาได้ กรอบงานเพจ ASP.NET รับรู้การเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นกับไฟล์ Global.asax โดยอัตโนมัติ กรอบงานเพจ ASP.NET รีสตาร์ทแอปพลิเคชันหลังจากมีการเปลี่ยนแปลง Global.asax ซึ่งรวมถึงการปิดเซสชันเบราว์เซอร์ทั้งหมด ลบข้อมูลสถานะทั้งหมด และรีสตาร์ทโดเมนแอปพลิเคชัน
ไฟล์ Global.asax สืบทอดมาจากคลาส HttpApplication ซึ่งรักษาพูลของอ็อบเจ็กต์ HttpApplication และจัดสรรอ็อบเจ็กต์ในพูลให้กับแอปพลิเคชันเมื่อจำเป็น ไฟล์ Global.asax มีเหตุการณ์ต่อไปนี้:
· Application_Init: เหตุการณ์นี้จะถูกทริกเกอร์เมื่อมีการสร้างอินสแตนซ์หรือเรียกใช้แอปพลิเคชันเป็นครั้งแรก มันจะถูกเรียกสำหรับอินสแตนซ์ออบเจ็กต์ HttpApplication ทั้งหมด
· Application_Disposed: ทริกเกอร์ก่อนที่แอปพลิเคชันจะถูกทำลาย นี่เป็นสถานที่ที่ดีเยี่ยมในการล้างทรัพยากรที่ใช้ก่อนหน้านี้
· Application_Error: เหตุการณ์นี้จะถูกทริกเกอร์เมื่อพบข้อยกเว้นที่ไม่สามารถจัดการได้ในแอปพลิเคชัน
· Application_Start: เหตุการณ์นี้จะถูกทริกเกอร์เมื่อมีการสร้างอินสแตนซ์แรกของคลาส HttpApplication ช่วยให้คุณสร้างวัตถุที่สามารถเข้าถึงได้โดยอินสแตนซ์ HttpApplication ทั้งหมด
· Application_End: เหตุการณ์นี้เกิดขึ้นเมื่ออินสแตนซ์สุดท้ายของคลาส HttpApplication ถูกทำลาย จะมีการทริกเกอร์เพียงครั้งเดียวตลอดอายุของแอปพลิเคชัน
· Application_BeginRequest: ทริกเกอร์เมื่อได้รับคำขอแอปพลิเคชัน สำหรับคำขอ นี่เป็นเหตุการณ์แรกที่จะถูกทริกเกอร์ โดยปกติคำขอจะเป็นคำขอหน้า (URL) ที่ผู้ใช้ป้อน
· Application_EndRequest: เหตุการณ์สุดท้ายที่ร้องขอโดยแอปพลิเคชัน
· Application_PreRequestHandlerExecute: เหตุการณ์นี้ถูกทริกเกอร์ก่อนที่เฟรมเวิร์กเพจ ASP.NET จะเริ่มดำเนินการตัวจัดการเหตุการณ์ เช่น เพจหรือบริการบนเว็บ
· Application_PostRequestHandlerExecute: เหตุการณ์นี้จะถูกทริกเกอร์เมื่อกรอบงานเพจ ASP.NET สิ้นสุดการดำเนินการตัวจัดการเหตุการณ์
· Applcation_PreSendRequestHeaders: เหตุการณ์นี้จะถูกทริกเกอร์เมื่อเฟรมเวิร์กเพจ ASP.NET ส่งส่วนหัว HTTP ไปยังไคลเอนต์ที่ร้องขอ (เบราว์เซอร์)
· Application_PreSendContent: เหตุการณ์นี้จะถูกทริกเกอร์เมื่อเฟรมเวิร์กเพจ ASP.NET ส่งเนื้อหาไปยังไคลเอนต์ที่ร้องขอ (เบราว์เซอร์)
· Application_AcquireRequestState: เหตุการณ์นี้จะถูกทริกเกอร์เมื่อเฟรมเวิร์กเพจ ASP.NET ได้รับสถานะปัจจุบัน (สถานะเซสชัน) ที่เกี่ยวข้องกับคำขอปัจจุบัน
· Application_ReleaseRequestState: เหตุการณ์นี้จะถูกทริกเกอร์เมื่อเฟรมเวิร์กเพจ ASP.NET ดำเนินการจัดการเหตุการณ์ทั้งหมดเสร็จแล้ว ซึ่งจะทำให้โมดูลสถานะทั้งหมดบันทึกข้อมูลสถานะปัจจุบัน
· Application_ResolveRequestCache: เหตุการณ์นี้จะถูกทริกเกอร์เมื่อเฟรมเวิร์กเพจ ASP.NET ทำการร้องขอการให้สิทธิ์เสร็จสมบูรณ์ อนุญาตให้โมดูลแคชให้บริการคำขอจากแคช ดังนั้นจึงข้ามการดำเนินการของตัวจัดการเหตุการณ์
· Application_UpdateRequestCache: เหตุการณ์นี้จะถูกทริกเกอร์เมื่อเฟรมเวิร์กเพจ ASP.NET ดำเนินการตัวจัดการเหตุการณ์เสร็จสิ้น อนุญาตให้โมดูลแคชจัดเก็บข้อมูลการตอบสนองเพื่อใช้ในการตอบสนองต่อคำขอที่ตามมา
· Application_AuthenticateRequest: เหตุการณ์นี้จะถูกทริกเกอร์เมื่อโมดูลความปลอดภัยสร้างข้อมูลประจำตัวที่ถูกต้องสำหรับผู้ใช้ปัจจุบัน ในเวลานี้ ข้อมูลประจำตัวของผู้ใช้จะได้รับการยืนยัน
· Application_AuthorizeRequest: เหตุการณ์นี้จะถูกทริกเกอร์เมื่อโมดูลความปลอดภัยยืนยันว่าผู้ใช้สามารถเข้าถึงทรัพยากรได้
· Session_Start: เหตุการณ์นี้จะเกิดขึ้นเมื่อผู้ใช้ใหม่เข้าถึงเว็บไซต์ของแอปพลิเคชัน
· Session_End: เหตุการณ์นี้จะถูกทริกเกอร์เมื่อเซสชันของผู้ใช้หมดเวลา สิ้นสุด หรือเมื่อพวกเขาออกจากเว็บไซต์แอปพลิเคชัน
ปัญหาสำคัญในการใช้เหตุการณ์เหล่านี้คือการรู้ลำดับการไล่ออก เหตุการณ์ Application_Init และ Application_Start เริ่มทำงานหนึ่งครั้งเมื่อแอปพลิเคชันเริ่มทำงานครั้งแรก ในทำนองเดียวกัน เหตุการณ์ Application_Disposed และ Application_End จะถูกดำเนินการหนึ่งครั้งเมื่อแอปพลิเคชันสิ้นสุดลง นอกจากนี้ เหตุการณ์ตามเซสชัน (Session_Start และ Session_End) จะถูกนำมาใช้เฉพาะเมื่อผู้ใช้เข้าและออกจากไซต์เท่านั้น เหตุการณ์ที่เหลือจัดการคำขอของแอปพลิเคชัน ลำดับที่เหตุการณ์เหล่านี้ถูกทริกเกอร์คือ:
· Application_BeginRequest
· Application_AuthenticateRequest
· Application_AuthorizeRequest
· Application_ResolveRequestCache
·
Application_AcquireRequestState ·
Application_PreRequestHandlerExecute · Application_PreSendRequestHeaders
· Application_PreSendRequestContent
· <<Execution Code>>
· Application_PostRequestHandlerExecute
·Application_ReleaseRequestState
· Application_UpdateRequestCache
· Application_EndRequest
เหตุการณ์เหล่านี้ มักใช้เพื่อความปลอดภัย ตัวอย่าง C# ต่อไปนี้สาธิตเหตุการณ์ Global.asax ที่แตกต่างกัน โดยใช้เหตุการณ์ Application_Authenticate เพื่อทำการตรวจสอบสิทธิ์ตามแบบฟอร์มผ่านคุกกี้ นอกจากนี้ เหตุการณ์ Application_Start จะเติมตัวแปรของแอปพลิเคชัน และ Session_Start จะเติมตัวแปรเซสชัน เหตุการณ์ Application_Error จะแสดงข้อความธรรมดาที่อธิบายข้อผิดพลาดที่เกิดขึ้น
ป้องกันโมฆะ Application_Start (ผู้ส่งวัตถุ EventArgs e) {
Application["Title"] = "ตัวอย่าง Builder.com";
-
ป้องกันเป็นโมฆะ Session_Start (ผู้ส่งวัตถุ EventArgs e) {
เซสชัน["startValue"] = 0;
-
โมฆะที่ได้รับการป้องกัน Application_AuthenticateRequest (ผู้ส่งวัตถุ EventArgs e) {
//แยกคุกกี้การรับรองความถูกต้องของแบบฟอร์ม
string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = Context.Request.Cookies [ชื่อคุกกี้];
ถ้า (null == authCookie) {
// ไม่มีคุกกี้การรับรองความถูกต้อง
กลับ;
-
FormsAuthenticationTicket authTicket = null;
พยายาม {
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
} จับ (ข้อยกเว้นเช่น) {
// บันทึกรายละเอียดข้อยกเว้น (ละเว้นเพื่อความง่าย)
กลับ;
-
ถ้า (null == authTicket) {
// คุกกี้ล้มเหลวในการถอดรหัส
กลับ;
-
// เมื่อสร้างตั๋ว คุณสมบัติ UserData จะถูกกำหนด
// สตริงชื่อบทบาทที่คั่นด้วยไปป์
บทบาทสตริง [2]
บทบาท[0] = "หนึ่ง"
บทบาท[1] = "สอง"
// สร้างวัตถุประจำตัว
FormsIdentity id = FormsIdentity ใหม่ (authTicket);
// ตัวการนี้จะไหลไปตลอดการร้องขอ
หลัก GenericPrincipal = GenericPrincipal ใหม่ (id, บทบาท);
// แนบวัตถุหลักใหม่กับวัตถุ HttpContext ปัจจุบัน
Context.User = เงินต้น;
-
ป้องกันโมฆะ Application_Error (ผู้ส่งวัตถุ EventArgs e) {
Response.Write("พบข้อผิดพลาด");
}
http://www.cnblogs.com/niit007/archive/2006/08/13/475565.html