ASP ไฟล์ Global.asa
ไฟล์ Global.asa
ไฟล์ Global.asa เป็นไฟล์ทางเลือกที่สามารถมีการประกาศอ็อบเจ็กต์ ตัวแปร และเมธอดที่สามารถเข้าถึงได้โดยทุกหน้าในแอปพลิเคชัน ASP
สคริปต์เบราว์เซอร์ที่ถูกต้องทั้งหมด (JavaScript, VBScript, JScript, PerlScript เป็นต้น) สามารถใช้ได้ภายใน Global.asa
ไฟล์ Global.asa สามารถมีได้เฉพาะสิ่งต่อไปนี้:
- กิจกรรมการสมัคร
- งานกิจกรรม
- <object> ประกาศ
- ประเภทการประกาศห้องสมุด
- คำสั่ง #include
หมายเหตุ:ไฟล์ Global.asa ต้องเก็บไว้ในไดเร็กทอรีรากของแอปพลิเคชัน ASP และแต่ละแอปพลิเคชันสามารถมีไฟล์ Global.asa ได้เพียงไฟล์เดียวเท่านั้น
กิจกรรมใน Global.asa
ใน Global.asa คุณสามารถบอกแอปพลิเคชันและวัตถุของเซสชันว่าต้องทำอย่างไรเมื่อแอปพลิเคชัน/เซสชันเริ่มต้น และต้องทำอย่างไรเมื่อแอปพลิเคชัน/เซสชันสิ้นสุดลง รหัสนี้อยู่ในตัวจัดการเหตุการณ์ ไฟล์ Global.asa สามารถมีเหตุการณ์ได้สี่ประเภท:
Application_OnStart - เกิดขึ้นเมื่อผู้ใช้ FIRST เรียกหน้าแรกในแอปพลิเคชัน ASP เหตุการณ์นี้เกิดขึ้นหลังจากเริ่มเว็บเซิร์ฟเวอร์ใหม่หรือหลังจากแก้ไขไฟล์ Global.asa เหตุการณ์ "Session_OnStart" เกิดขึ้นทันทีหลังจากเหตุการณ์นี้Session_OnStart - เหตุการณ์นี้เกิดขึ้นทุกครั้งที่ผู้ใช้ใหม่ร้องขอหน้าแรกในแอปพลิเคชัน ASP
Session_OnEnd - เหตุการณ์นี้เกิดขึ้นทุกครั้งที่ผู้ใช้สิ้นสุดเซสชัน เซสชั่นผู้ใช้จะสิ้นสุดลงหลังจากที่ผู้ใช้ไม่ได้ร้องขอเพจในช่วงเวลาที่กำหนด (โดยค่าเริ่มต้นคือ 20 นาที)
Application_OnEnd - เหตุการณ์นี้เกิดขึ้นหลังจากผู้ใช้ LAST สิ้นสุดเซสชัน โดยทั่วไป เหตุการณ์นี้เกิดขึ้นเมื่อเว็บเซิร์ฟเวอร์หยุดทำงาน ขั้นตอนนี้ใช้เพื่อล้างการตั้งค่าหลังจากที่แอปพลิเคชันหยุดทำงาน เช่น ลบระเบียนหรือเขียนข้อมูลลงในไฟล์ข้อความ
ไฟล์ Global.asa อาจมีลักษณะดังนี้:
<script language="vbscript" runat="server">
sub Application_OnStart
'some code
end sub
sub Application_OnEnd
'some code
end sub
sub Session_OnStart
'some code
end sub
sub Session_OnEnd
'some code
end sub
</script>
หมายเหตุ:เนื่องจากเราไม่สามารถใช้ตัวคั่นสคริปต์ ASP (<% และ %>) เพื่อแทรกสคริปต์ในไฟล์ Global.asa เราจึงใส่รูทีนย่อยในองค์ประกอบ HTML <script>
<object> ประกาศ
เป็นไปได้ที่จะสร้างวัตถุที่มีขอบเขตเซสชันหรือแอปพลิเคชันใน Global.asa โดยใช้แท็ก <object>
หมายเหตุ:แท็ก <object> ควรอยู่นอกแท็ก <script>!
ไวยากรณ์
<object runat="server" scope="scope" id="id"
{progid="progID"|classid="classID"}>
....
</object>
Parameter | Description |
---|---|
scope | Sets the scope of the object (either Session or Application) |
id | Specifies a unique id for the object |
ProgID | An id associated with a class id. The format for ProgID is [Vendor.]Component[.Version]
Either ProgID or ClassID must be specified. |
ClassID | Specifies a unique id for a COM class object. Either ProgID or ClassID must be specified. |
ตัวอย่าง
ตัวอย่างแรกสร้างวัตถุของขอบเขตเซสชันชื่อ "MyAd" โดยใช้พารามิเตอร์ ProgID:
<object runat="server" scope="session" id="MyAd"
progid="MSWC.AdRotator">
</object>
ตัวอย่างที่สองสร้างวัตถุของขอบเขตแอปพลิเคชันชื่อ "MyConnection" โดยใช้พารามิเตอร์ ClassID:
<object runat="server" scope="application" id="MyConnection"
classid="Clsid:8AD3067A-B3FC-11CF-A560-00A0C9081C21">
</object>
ออบเจ็กต์ที่ประกาศในไฟล์ Global.asa สามารถใช้ได้กับสคริปต์ใดๆ ในแอปพลิเคชัน:
GLOBAL.ASA:
<object runat="server" scope="session" id="MyAd"
progid="MSWC.AdRotator">
</object>
You could reference the object "MyAd" from any page in the ASP application:
SOME .ASP FILE:
<%=MyAd.GetAdvertisement("/banners/adrot.txt")%>
ประเภทLibrary Declarations
TypeLibrary เป็นคอนเทนเนอร์สำหรับเนื้อหาของไฟล์ DLL ที่สอดคล้องกับวัตถุ COM การรวมการเรียกไปยัง TypeLibrary ในไฟล์ Global.asa ทำให้สามารถเข้าถึงค่าคงที่ของวัตถุ COM ได้ และรหัส ASP สามารถรายงานข้อผิดพลาดได้ดีขึ้น ถ้าเว็บแอปพลิเคชันของคุณใช้อ็อบเจ็กต์ COM ที่ได้ประกาศชนิดข้อมูลในไลบรารีชนิด คุณสามารถประกาศไลบรารีชนิดใน Global.asa ได้
ไวยากรณ์
<!--METADATA TYPE="TypeLib"
file="filename"
uuid="id"
version="number"
lcid="localeid"
-->
Parameter | Description |
---|---|
file | Specifies an absolute path to a type library.
Either the file parameter or the uuid parameter is required |
uuid | Specifies a unique identifier for the type library.
Either the file parameter or the uuid parameter is required |
version | Optional. Used for selecting version. If the requested version is not found, then the most recent version is used |
lcid | Optional. The locale identifier to be used for the type library |
ค่าความผิดพลาด
เซิร์ฟเวอร์สามารถส่งคืนข้อความแสดงข้อผิดพลาดต่อไปนี้:
Error Code | Description |
---|---|
ASP 0222 | Invalid type library specification |
ASP 0223 | Type library not found |
ASP 0224 | Type library cannot be loaded |
ASP 0225 | Type library cannot be wrapped |
หมายเหตุ:แท็ก METADATA สามารถปรากฏที่ใดก็ได้ในไฟล์ Global.asa (ทั้งแท็ก <script> ภายในและภายนอก) อย่างไรก็ตาม ขอแนะนำว่าแท็ก METADATA จะปรากฏใกล้กับด้านบนสุดของไฟล์ Global.asa
ข้อ จำกัด
ข้อจำกัดเกี่ยวกับสิ่งที่คุณสามารถรวมไว้ในไฟล์ Global.asa:
- คุณไม่สามารถแสดงข้อความที่เขียนในไฟล์ Global.asa ไฟล์นี้ไม่สามารถแสดงข้อมูลได้
- คุณสามารถใช้ได้เฉพาะอ็อบเจ็กต์เซิร์ฟเวอร์และแอปพลิเคชันในรูทีนย่อย Application_OnStart และ Application_OnEnd ในรูทีนย่อย Session_OnEnd คุณสามารถใช้วัตถุเซิร์ฟเวอร์ แอปพลิเคชัน และเซสชันได้ ในรูทีนย่อย Session_OnStart คุณสามารถใช้ออบเจกต์ในตัวใดก็ได้
วิธีใช้รูทีนย่อย
Global.asa มักใช้เพื่อเริ่มต้นตัวแปร
ตัวอย่างด้านล่างแสดงวิธีการตรวจสอบเวลาที่แน่นอนที่ผู้เยี่ยมชมมาถึงเว็บไซต์เป็นครั้งแรก เวลาจะถูกเก็บไว้ในตัวแปร Session ชื่อ "started" และค่าของตัวแปร "started" สามารถเข้าถึงได้จากหน้า ASP ใดๆ ในแอปพลิเคชัน:
<script language="vbscript" runat="server">
sub Session_OnStart
Session("started")=now()
end sub
</script>
Global.asa ยังสามารถใช้เพื่อควบคุมการเข้าถึงเพจ
ตัวอย่างด้านล่างแสดงวิธีการเปลี่ยนเส้นทางผู้เยี่ยมชมใหม่ทุกคนไปยังหน้าอื่น ในกรณีนี้ไปยังหน้าที่ชื่อว่า "newpage.asp":
<script language="vbscript" runat="server">
sub Session_OnStart
Response.Redirect("newpage.asp")
end sub
</script>
และคุณสามารถรวมฟังก์ชันต่างๆ ไว้ในไฟล์ Global.asa ได้
ในตัวอย่างด้านล่างรูทีนย่อย Application_OnStart เกิดขึ้นเมื่อเว็บเซิร์ฟเวอร์เริ่มทำงาน จากนั้นรูทีนย่อย Application_OnStart จะเรียกรูทีนย่อยอื่นชื่อ "getcustomers" รูทีนย่อย "getcustomers" จะเปิดฐานข้อมูลและดึงชุดระเบียนจากตาราง "ลูกค้า" ชุดระเบียนถูกกำหนดให้กับอาร์เรย์ ซึ่งสามารถเข้าถึงได้จากหน้า ASP ใดๆ โดยไม่ต้องสอบถามฐานข้อมูล:
<script language="vbscript" runat="server">
sub Application_OnStart
getcustomers
end sub
sub getcustomers
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open "c:/webdata/northwind.mdb"
set rs=conn.execute("select name from customers")
Application("customers")=rs.GetRows
rs.Close
conn.Close
end sub
</script>
ตัวอย่าง Global.asa
ในตัวอย่างนี้ เราจะสร้างไฟล์ Global.asa ที่นับจำนวนผู้เยี่ยมชมปัจจุบัน
- Application_OnStart ตั้งค่าตัวแปร "ผู้เข้าชม" ของแอปพลิเคชันเป็น 0 เมื่อเซิร์ฟเวอร์เริ่มทำงาน
- รูทีนย่อย Session_OnStart เพิ่มหนึ่งรายการให้กับตัวแปร "ผู้เยี่ยมชม" ทุกครั้งที่มีผู้เยี่ยมชมใหม่มาถึง
- รูทีนย่อย Session_OnEnd จะลบหนึ่งรายการออกจาก "ผู้เยี่ยมชม" ทุกครั้งที่มีการทริกเกอร์รูทีนย่อยนี้
ไฟล์ Global.asa:
<script language="vbscript" runat="server">
Sub Application_OnStart
Application("visitors")=0
End Sub
Sub Session_OnStart
Application.Lock
Application("visitors")=Application("visitors")+1
Application.UnLock
End Sub
Sub Session_OnEnd
Application.Lock
Application("visitors")=Application("visitors")-1
Application.UnLock
End Sub
</script>
วิธีแสดงจำนวนผู้เยี่ยมชมปัจจุบันในไฟล์ ASP:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>There are <%response.write(Application("visitors"))%>
online now!</p>
</body>
</html>