線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1629
推到 Plurk!
推到 Facebook!

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

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-26 12:40:06 IP:61.221.xxx.xxx 未訂閱
此為轉貼資料    關於Global.asa文件的深入研究與session變數失效提示的具體方法   一:Global.asa文件的釋疑!從字面上講!Global就是全局的,全球的意思!     我們都知道!瀏覽器中的變數存活期十分短暫!只有幾十秒!也就是一個頁面的下載時間。那?我們怎樣從生命開始到結束都追蹤session級變數哪?靠asp文件已經力不從心了!微軟告訴我們:靠我們的Global.asa吧!     global.asa是一個可選的文件!他必須放在你的www根目錄下,或是虛擬目錄的根目錄下。這樣,可以確保你的一個應用程式共用一個global.asa文件。正是他可以在你的應用程式開始始終追蹤應用程式物件與會話物件。    二:Global.asa文件的組成與用法釋疑!     ?了讓伺服器紀錄單獨用戶的線程。Global.asa文件必須指定 ....... 而runat=server這行文字告訴我們他確實是在伺服器上執行的。(所以你不可能用msgbox()的函數,也不可能用的方法提示用戶或寫一些什?!後有詳述) 完整的用法是: Sub Application_OnStart . . . End Sub Sub Application_Onend . . . End Sub Sub session_OnStart . . . End Sub Sub session_Onend . . . End Sub 而整個過程是這樣的。當你訪問一個站點文件。如果是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中對其用戶端做標記!代碼如下: ..... Sub session_OnStart response.cookies("flag")=1 End Sub ...... 然後在你的檢測代碼中寫下檢測代碼 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事件。 這裏你要加上。 ..... Sub session_OnStart session.timeout=30 '這裏指sission的失效時間,以分鐘?單位! response.cookies("flag")=1 response.cookies("time")=now() '這裏紀錄他的初次建立session的時間。 End Sub ...... 看到這裏,我們應該可以不難寫出檢測代碼。 將上面的代碼重新寫過,加一個時間運算如果它的失效還有5分鐘,就提示他。 應該不難!
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
系統時間:2024-09-09 1:03:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!