深入研究Application和Session对象 |
用ASP编写
虚构社区、网上购物等程序时,Application和Session对象
存在举足轻重的作用,
可以灵便
正当地
使用这两 一、Application对象的成员概述 Application对象成员包含Application对象的 集中、 步骤和事件 。 ⒈Application对象的 集中 Contents 集中:没有 使用 StaticObjects: 使用 例:在default.asp中有如下赋值 application("a")="a" application("b")=128 application("c")=false 则有contents 集中 application.contents(1)="a" '也可写为application.contents("a")="a" application.contents(2)=128 '也可写为application.contents("b")=128 application.contents(3)=false '也可写为application.contents("c")=false 在此小编推举你在调用时
使用类如application.contents("a")的
步骤,由于这样更为直观,如果用序号来
示意的话则 ⒉Application对象的 步骤 Contents.Remove("变量名"):从Application.Contents 集中中删除指定的变量 Contents.RemoveAll() :把Application.Contents 集中中的全部变量删除 Lock() :锁定Application对象,使得惟独目前的ASP页对内容能进行 拜访 Unlock() :解除对Application对象的锁定 例:在default.asp中: application("a")="a" application("b")=128 application("c")=false response.write application.contents(1)&" response.write application.contents(2)&" response.write application.contents(3)&" response.write "After Remove b:" application.contents.remove("b") response.write application.contents(1)&" response.write application.contents(2)&" 执行 后果: a 128 False After Remove b: a False 如果要删除
集中中全部变量用application.contents.removeall即可,至于Lock和Unlock
步骤在实际中
时常用到,读 ⒊Application对象事件 OnStart:第一个 拜访服务器的消费者第一次 拜访某一页面时 产生 OnEnd :当最终一个消费者的会话已经
完毕而且该会话的OnEnd事件全部代码已经执行
结束后
产生,或最终一个消费者
拜访 想要定义application对象的OnStart和OnEnd事件里做什么需求将代码写在Global.asa这个文件里(下文有举例),并 二、Session对象的成员概述 Session对象的成员比Application对象多一项属性,即: 集中、属性、 步骤、事件 ⒈Session对象的 集中 Contents :没有 使用 StaticObject: 使用 例:在default.asp中有如下赋值 session("a")="a" session("b")=128 session("c")=false 则有contents 集中 session.contents(1)="a" '也可写为session.contents("a")="a" session.contents(2)=128 '也可写为session.contents("b")=128 session.contents(3)=false '也可写为session.contents("c")=false ⒉Session对象的属性 CodePage: 可读/可写 。整型 。定义用于在阅读器中显示页内容的代码页 。代码页是字符集的数字值,不同的语言
使用 LCID : 可读/可写 。整型 。定义发送给阅读器的页面地域标识 。LCID是唯一地标识地域的一个国际
标准缩写,例如, SessionID: 只读 。长整型 。返回本会话的会话标识符 。每
缔造一个会话,由服务器自动
调配一个标识符 。
可以依据它 Timeout : 可读/可写 。整型 。为会话定义以分钟为单位的超时限定 。如果消费者在这个
工夫内没有刷新或
申请任何一个 以上属性在实际 利用中作用不大,而且 根本上不需求怎么 批改,这几个属性也没什么特殊的地方 。 ⒊Session对象的 步骤 Contents.Remove("变量名"): 从Session.contents 集中中删除指定的变量 Contents.Removeall() : 删除Session.contents 集中中的全部变量 Abandon() : 完毕目前消费者会话而且 取缔目前Session对象 。 Session对象的Contents.Remove("变量名")和Contents.Removeall()
步骤与Application对象的
根本上没什么区别,为 消费者会话的全部Session变量,不同的是Contents.Removeall()单纯地
开释Session变量的值而不终止目前的会话,而 ⒋Session对象的事件 OnStart: 当ASP消费者会话产生时触发,一旦有任一消费者对本服务器 申请任一页面即产生该事件 。 OnEnd : 当ASP消费者会话 完毕时触发,当 使用Abandon() 步骤或超时也会触发该事件 。 这两个事件和Application的OnStart、OnEnd事件一样,也是必须放在Global.asa文件里,下 三、Global.asa ASP的Application和Session对象体现了
其余ASP内置对象所没有的
特色--事件 。每一个访客
拜访服务器时都会触发一 OnStart和OnEnd这两个事件普通
利用在
虚构社区中统计在线人数、
批改消费者的在线离线状态等 。要具体定义这两个事 文件 注明: global.asa 位于d:Inetpubwwwroot目录下 default.asp 位于d:Inetpubwwwroot目录下, 虚构社区登录页面 login.asp 位于d:Inetpubwwwroot目录下,用于检测消费者输入的消费者名及密码 index.asp 位于d:Inetpubwwwroot目录下, 虚构社区首页 bbs.mdb 位于d:Inetpubwwwroot目录下,存储消费者信息的数据库 数据库(ACCESS) 构造: ===bbs表=== id 消费者ID,长整型 name 消费者名,文本型 code 密码,文本型 online 在线状态,是/否 <script LANGUAGE="VBScript" RUNAT="Server"> Sub Application_OnStart application("online")=0 End Sub sub Application_OnEnd nd Sub Sub Session_OnStart End Sub Sub Session_OnEnd if session.contents("pass") then '推断是不是为登录消费者的Session_OnEnd application.lock application("online")=application("online")-1 application.unlock end if End Sub </script> ============== ===login.asp=== ......'密码验证,衔接数据库,检测消费者输入的消费者名及密码是不是正确 if 密码验证通过 then session("name")=rs("name") session("id")=rs("id") session("pass")=true else rs.close conn.close response.write "密码 舛误!" response.end end if application.lock application("online")=application("online")+1 conn.Execute ("update bbs set online=1 where id="&session("id"))'将消费者的状态设为在线 application.unlock rs.close conn.close response.redirect "index.asp" '初始化数据后跳转到社区首页 =========== 在本例中,用application("online")变量记录已经登录社区的在线人数,由于一旦有消费者
拜访服务器而
无论消费者是不是 这只不过一个统计在线人数的
方便例子,关于一个
完全的
虚构社区来说,仅仅统计有多少人在线是不够的,在本例中数 ===global.sas=== <script LANGUAGE="VBScript" RUNAT="Server"> Sub Application_OnStart application("online")=0 set application("conn")=Server.CreateObject("ADODB.Connection") application("db")=Server.MapPath("bs.mdb") '此处最好 使用绝对路径bs.mdb,下文有 详尽介绍 End Sub sub Application_OnEnd set application("conn")=nothing End Sub Sub Session_OnStart End Sub Sub Session_OnEnd if session.contents("pass") then '推断是不是为登录消费者的Session_OnEnd application("con").open ="driver={Microsoft Access Driver (*.mdb)};dbq="&application("db") application.lock application("online")=application("online")-1 application("con").Execute ("update friends set online=0 where id="&session.contents("id")) application.unlock application("con").close end if End Sub </script> ============== 至此,
完全的代码已经
实现了 。由于在Application和Session的OnEnd事件里不能
使用Server对象,所以要将数据库的 四、本文实例中值得引起 留神的两点 ⒈OnEnd事件里的session.contents 刚开始接触global.asa的朋友 时常会将上面Session_OnEnd事件里的 if session.contents("pass") then 写成 if session("pass") then, 这样的话系统不会
揭示
舛误,然而永远也不会执行then后面的内容,这是由于在OnEnd事件里禁止
使用Session对象, ⒉Application_OnStart事件里用Server.MapPath猎取数据库的物理地址时应
使用绝对地址为了
注明这个问题,大家可 application("db")=Server.MapPath("bs.mdb")改为: application("db")=Server.MapPath("bbs.mdb") 而后在d:inetpubwwwroot目录下 构建一个test子目录,写一个temp.asp在test目录里 。 ====test.asp==== <%response.write application("db")%> ================ 再将temp.asp拷贝一份放在根目录下(d:inetpubwwwroot) 。用记事本
打开global.asa,再
打开两个阅读器,阅读器A d:inetpubwwwrootbs.mdb
而后,在记事本的窗口上点"文件"菜单,选"
保留"(使global.asa的
批改
工夫转变,从而使IIS重启动全部服务),再在浏 d:inetpubwwwrootestbs.mdb global.asa文件
固然是放在站点根目录下,然而如果在server.mappath中
使用的是
绝对地址,而触发Application_OnStart |