程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP技巧 >> 關於Global.asa文件的深入研究與session變量失效提示的具體方法

關於Global.asa文件的深入研究與session變量失效提示的具體方法

編輯:ASP技巧

一:Global.asa文件的釋疑!從字面上講!Global就是全局的,全球的意思!
    我們都知道!浏覽器中的變量存活期十分短暫!只有幾十秒!也就是一個頁面的下載時間。那麼我們怎樣從生命開始
到結束都追蹤session級變量哪?靠ASP文件已經力不從心了!微軟告訴我們:靠我們的Global.asa吧!
    global.asa是一個可選的文件!他必須放在你的www根目錄下,或是虛擬目錄的根目錄下。這樣,可以確保你的一個應
用程序共享一個global.asa文件。正是他可以在你的應用程序開始始終追蹤應用程序對象與會話對象。

二:Global.asa文件的組成與用法釋疑!
    為了讓服務器紀錄單獨用戶的線程。Global.asa文件必須指定
<SCRipT LANGUAGE=ScriptLanguage RUNAT=Server>
.......
</SCRIPT>
而runat=server這行文字告訴我們他確實是在服務器上執行的。(所以你不可能用msgbox()的函數,也不可能用
document.write的方法提示用戶或寫一些什麼!後有詳述)
完整的用法是:
<SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server>

Sub application_OnStart
. . .
End Sub

Sub Application_Onend
. . .
End Sub

Sub session_OnStart
. . .
End Sub

Sub session_Onend
. . .
End Sub

</SCRIPT>

而整個過程是這樣的。當你訪問一個站點文件。如果是Html的,則程序不會運行!因為裡面不可能有application,session
對象的發生。如果是ASP文件,則服務器首先檢測www的根目錄,或虛擬目錄的根目錄有沒有global.asa文件。如有,則運
行程序內的相應代碼!但是請注意,如果你的ASP文件中並沒有建立實例化的application,session。服務器同樣不追蹤
你!
  另外:值得注意的是:在Onstart事件發生時,服務器的任何對象都可以使用!
但是當onend事件發生時。則應注意session_Onend中只允許server,application,session對象運行。但實際上限制更多。
你不能在其中運行server.mapth方法。而且不可以再對session進行附值。

三:如何在session對象失效時提醒用戶---失效後
    終於開始討論有用的話題了!這也是許多網友關心的問題!
    首先,我們討論失效後如何提醒。
    這也要提醒嗎?直接檢測session("**")得值就可以嗎?(**為你要檢測其session("**")是否失效的值!)這樣並不
好,因為第一次上來的人也可能其session("**")為空!
    那麼,我們來看看,該功能具體用在什麼地方。最明顯的例子為購物網頁,如果你用session來存儲購物車。你必須告
訴他他的購物車是否失效(如果再購物期間用戶出去了,或是肚子不舒服了臨時干了什麼!session的值可能失效!)
    有的想法是一失效就給出提示。可惜很難實現!因為session_onend事件在服務器端執行!不可能及時的傳過來告訴
你,除非用server push的方法。其實也不好!如果你不在,或是沒有了連接,他同樣無法完成。
    所以只有用戶再次登陸時告訴你你的上一次購物未完成,只有重新登陸!
    這下就好實現了。針對與單獨的客戶,如果他開始購物了那麼他將觸發session_onstart事件的發生。這樣你在
global.asa中對其客戶端做標記!代碼如下:
<SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server>
.....
Sub session_OnStart
    response.cookIEs("flag")=1
End Sub
......
</script>
然後在你的檢測代碼中寫下檢測代碼
flag=request.cookIEs("flag")

if flag=1 and session(**)="" then
   response.write "你的上一次登陸已過期了"
   response.end
elseif session(**)="" then
   response.write "你還沒有登陸"
end if       
你可以將其寫成一個文件,然後用<--#include....-->包含進你需要檢測的文件中,這樣就可以完成對其檢測了!

那為什麼不能在session_onend 事件中寫代碼,這樣不是更容易嗎?

可惜,我想了許多辦法也沒有想出。因為在session_onend事件中,你不可能用response.write,response.redirect。 對
象做些什麼,他們不可訪問。只能用的幾個對象application,session,server還限制多多。你也不可能在此期間再給
session(**)附值,這樣他可能再也不會失效了,呵呵!

四:失效前給出提示。
    防患於未然是個很好的想法,但實現起來就不是真的很有用。我們上面討論過。這必須是用戶連接著。而且好像還沒
有session快失效的事件,呵呵!
    那麼真的沒有沒有辦法了嗎?其實有,我們只要將上面的代碼多加幾行就可以了。
    首先。還是用global.asa文件中的session_onstart事件。
這裡你要加上。
<SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server>
.....
Sub session_OnStart
    session.timeout=30       '這裡指sission的失效時間,以分鐘為單位!
    response.cookIEs("flag")=1
    response.cookIEs("time")=now() '這裡紀錄他的初次建立session的時間。
End Sub

......
</script>

看到這裡,我們應該可以不難寫出檢測代碼。
將上面的代碼重新寫過,加一個時間運算如果它的失效還有5分鐘,就提示他。
應該不難!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved