文章探索:   分类:    关键字:  
  + 栏目导航
  + 相关文章
asp中有关字符编码转换的几个函数
绝妙的asp生成静态页面html函数
Asp计算页面执行时间
一个简单的用存储过程分页
将asp页面转换成htm页面
ASP网站漏洞解析及黑客入侵防范方法
URL编码与SQL注入
几种常用排序算法(asp)
ASP调用带参数存储过程的几种方式
实用的ASP连接数据库的函数
ASP如何获取真实IP地址
ASP中怎么实现SQL数据库备份、恢复
判断Cookies是否处于开启状态
怎样才能将服务器端文件夹下的文件,..
几行Asp代码实现防止表单重复提交
用ASP设计网站在线人数统计程序
asp论坛在线人数统计研究
如何用ASP远程在数据库中创建Table
用ASP调用SQL Server的视图和存储过程
Asp与XML的关系
ASP读取EXCEL
在ASP中使用Oracle数据库技巧
一个通过web.Mail发送邮件的类
几种打开记录集方式的比较
购物车范例(购物车页面 )
如何使用FSO搜索硬盘文件
GB码和BIG5码的互换技术
用ASP开发WEB日期选择器
一个投票系统的源程序(coveryourasp.c..
列出服务器上的打印机


技术教程 -> ASP教程 ->  
浅谈session_onend的调试
来源:转载   人气:727   录入时间:2007-11-8
     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
   %>
   
   




Copyright(C)2007-2024 广州市佳沛数码科技有限公司 版权所有
公司地址: 广州市荔湾区东漖北路560号511室
电话:020-81803473 传真:020-81544987