بازاي هر virtual directory كه شما در IIS ميسازي يك فايل global.asa در root اون ساخته ميشه (در خود wwwroot هم بالطبع هست) كه محتواي اون يك سري كد vbscript يا javascript هست و شما ميتوني ازش براي تعريف عناصر و وقايع مربوط به application و session استفاده كني ولي خودش مستقيما قابل اجرا نيست بلكه رخدادهاي asp application متناظر با اون هست كه اونها رو فراخواني ميكنه.
asp application مجموعه فايلهاي asp هست كه در يك virtual directory و تمام زيرمجموعه اون قرار داره و عنصر application در فايل global.asa براي تعريف عناصري هست كه همه كاربرهاي يك asp application خاص بهش دسترسي دارن.
در مقابل عنصر session وقتي معني پيدا ميكنه كه يك كاربر يكي از صفحات asp يك asp application رو باز كنه. هر عنصري كه در session تعريف بشه تا زماني كه كاربر توي صفحات مختلف همون asp application ميچرخه ثابت ميمونه و اين تا زماني هست كه يا session منقضي (expire بشه) يا توسط كد رها بشه (abandone)
فايل global.asa معمولا 4 رخداد (event) مهم مربوط به application و session رو معين ميكنه.
application_onstart وقتي اجرا ميشه كه يك كاربر براي اولين بار (پس از بالا آمدن سرويس)
يكي از فايلهاي asp يك asp application رو باز كنه.
application_onend وقتي اجرا ميشه كه هيچ sessionي در يك asp application باقي نمونده باشه. يعني يا همه كاربرها اون asp application رو ترك كردن يا اينكه IIS متوقف بشه.
session_onstart هربار كه يك كاربر يكي از فايلهاي asp يك asp application رو درخواست ميكنه اجرا ميشه.
session_onend رو هم كه قبلا گفتيم كي اجرا ميشه.
كار كردن با اين 4 روال در عين حال كه مشكل نيست ولي هم دقت ميخواد هم يك قلق هايي داره.
براي نمايش تعداد كاربرهاي در حال كار ميتوني از كدي شبيه به اي استفاده كني:
کد:
sub application_onstart
application("online_users")=0
end sub
sub session_onstart
application.lock
application("online_users")=application("online_users")+1
application.unLock
end sub
sub session_onend
application.lock
application("online_users")=application("online_users")-1
application.unLock
end sub
اگر دقت كني ميبيني كه در application_onstart مقدار online_users بي مقدمه تعريف شده ولي براي عوض كردنش در session_onstart و session_onend اول application.lock و بعد application.unlock هست. علتش اينه كه application_onstart فقط يكبار و با اولين درخواست اجرا ميشه بنابراين اطمينان داريم كه كس ديگه اي نميتونه مقدار متغير رو تعيين كنه ولي در session_onstart و session_onend اين قضيه صادق نيست.