程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP技巧 >> 淺談session_onend的調試

淺談session_onend的調試

編輯:ASP技巧

 

    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
%>

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