session_onend是比較難調試的,這是因為:
一、沒有出錯信息提示(這也難怪,是沒有地方提示的,根本不知道要將出錯提示信息放到什麼地方去)。
二、大多數情況下,也不能使用session.abandon來手工釋放sesion進行調試——你釋放了所有的session,那你在session_onend中不要用到session對象嗎?所以,只好傻呼呼的等待session超時了。還好,session超時時域可以自己設,調試時設小點,比如2分鐘或1分鐘的。
三、如果你只有一台電腦,那就更難調試了,原因不用我說了吧。
下面我給大家說說我在調試session_onend時的一點點經驗:
一、不要懷疑你的session_onend沒有執行(其實開始時我也曾經懷疑過,因為總相信自己的session_onedn事件沒有錯),常聽有些人抱怨:“怎麼我的session_onend沒有執行,session_onstart是好好的”,當然了,session_onstart容易看到嘛。
如果你不信的話,你將一個標記放到session_onend的第一行。
sub session_onend
application("flag1")="session_onend已經執行了"
…………後面是你的session_onend的內容
end sub
然後等session超時後,用apptest.asp?key=flag1(aPPTest.ASP後面附有)查看application("flag1")的值,你肯定能看到“session_onend已經執行了”。
所以,一旦你的session_onend沒有達到你的目的時,應該檢討你的session_onend事件有沒有寫好——跟ASP文件一樣,session_onend一旦遇到錯誤,馬上停止執行……
二、寫session_onend事件時一定要仔細,要保證每個字每都不會錯,保證不出現語法,不出現邏輯錯誤。這個只能你的眼睛和思維能幫上你。
下面是我在調試聊天室的session_onend事件時的方法,供大學參考:
我在下面的程序中設了幾個標記:flag1,flag2,flag3,flag4,flag5
<SCRipT LANGUAGE="VBScript" RUNAT="Server">
sub Session_onEnd
ip=session("userip")
application("flag1")=ip ——標記flag1
chatdata=application("chatdata")
onliuser=application("onliuser")
kicklist=application("kicklist")
uleave=false
for i=0 to 50
if chatdata(i,1)=ip then
kicklist=replace(kicklist,",'#"&chatdata(i,0)&"'","")
onliuser=replace(onliuser,",'"&chatdata(i,0)&"'","")
chatdata(i,0)=""
chatdata(i,1)=""
chatdata(i,2)=0
chatdata(i,3)=""
chatdata(i,4)=0
chatdata(i,5)=""
uleave=true
application("flag2")="找到同ip的聊客" ——標記flag2
end if
next
kicklist=replace(kicklist,",'"&ip&"'","")
application("flag3")="kicklist的值為:"&kicklist ——標記flag3
if uleave then
for i=0 to 50
chatdata(i,4)=(chatdata(i,4) mod 4)+4
next
application("flag4")="執行了通知更新名單" ——標記flag4
end if
application("flag5")="第4標志" ——標記flag5
application.lock
application("kicklist")=kicklist
application("onliuser")=onliuser
application("chatdata")=chatdata
application.unlock
application("flag6")="執行了application變量更新" ——標記flag6
end sub
</script>
然後就是開窗口、登錄聊天室,關閉浏覽器(不要正常退出),等session超時。session超時後(最好在另一台電腦上),用apptest.asp?key=flag6……apptest.asp?key=flag5……aPPTest.ASP?key=flag4……查看各application的值,從而知道我的程序到底執行到了哪裡。
除非你看到最後一個標記flag6有值,否則證明你的程序存在語法錯誤!!
這樣可以找到程序在那部分出錯,然後再分析有錯的那一部分,重復上述步驟,直到你的session_onend達到你的要求。
比如你的flag3的值,但flag2沒有值,那就說明在flag2與flag3之間的程序段有語法錯誤……
附:調試程序aPPTest.ASP
程序名稱:aPPTest.ASP
程序功能:查看application變量值
調用方法:aPPTest.ASP?key=變量名&keyd=維數,key為要查看的application變量名,keyd為該application變量存放的數組維數。省略keyd時,表示該application變量不是數組。
<center>Application變量查看程序</center>
<%
key=request("key")
keyd=request("keyd")
if keyd="" then
response.write application(key)
response.end
end if
username=application(key)
select case keyd
case "2"
for i=0 to 50
for j=0 to 5
response.write username(i,j)&chr(13)&chr(10)
next
next
case "1"
for i=0 to ubound(username,1)
response.write i&replace(username(i),"<br>","")&"<br>"
next
end select
%>