亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > ASP > 正文

深入研究Application和Session對象

2024-05-04 11:07:06
字體:
來源:轉載
供稿:網友

用ASP編寫虛擬社區、網上購物等程序時,Application和Session對象具有舉足輕重的作用,能夠靈活合理地運用這兩
個對象是提高程序質量的關鍵。下面讓筆者根據自己在這方面的經驗,向大家深入介紹一下ASP的這兩個內建對象。

  一、Application對象的成員概述

  Application對象成員包括Application對象的集合、方法和事件。

 ?、盇pplication對象的集合

  Contents集合:沒有使用<OBJECT>元素定義的存儲于Applicaiton對象中的所有變量的集合

  StaticObjects:使用<OBJECT>元素定義的存儲于Application對象中的所有變量 的集合

  例:在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")的方法,因為這樣更為直觀,如果用序號來表示的話則
要考慮賦值的先后順序。

 ?、睞pplication對象的方法

  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)&"<br>"

  response.write application.contents(2)&"<br>"

  response.write application.contents(3)&"<br>"

  response.write "After Remove b:"

  application.contents.remove("b")

  response.write application.contents(1)&"<br>"

  response.write application.contents(2)&"<br>"

  執行結果:

  a

  128

  False

  After Remove b:

  a

  False

  如果要刪除集合中所有變量用application.contents.removeall即可,至于Lock和Unlock方法在實際中經常用到,讀
者也比較熟悉,在此就不在累贅。

 ?、矨pplication對象事件

  OnStart:第一個訪問服務器的用戶第一次訪問某一頁面時發生

  OnEnd :當最后一個用戶的會話已經結束并且該會話的OnEnd事件所有代碼已經執行完畢后發生,或最后一個用戶訪問
服務器一段時間(一般為20分鐘)后仍然沒有人訪問該服務器產生。

  想要定義application對象的OnStart和OnEnd事件里做什么需要將代碼寫在Global.asa這個文件里(下文有舉例),并
且將該文件放在站點的根目錄下(一般是Inetpubwwwroot)

  二、Session對象的成員概述

  Session對象的成員比Application對象多一項屬性,即:集合、屬性、方法、事件

 ?、盨ession對象的集合

  Contents :沒有使用<OBJECT>元素定義的存儲于特定Session對象的所有變量的集合。

  StaticObject:使用<OBJECT>元素定義的、存儲于Session對象中的所有變量的集合。

  例:在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: 可讀/可寫。整型。定義用于在瀏覽器中顯示頁內容的代碼頁。代碼頁是字符集的數字值,不同的語言使用
不同的代碼頁。例如,ANSI代碼頁為1252,日文代碼頁為932,簡體中文代碼頁為936。

  LCID : 可讀/可寫。整型。定義發送給瀏覽器的頁面地區標識。LCID是唯一地標識地區的一個國際標準縮寫,例如,
2057定義當前地區的貨幣符號是"£"。

  SessionID: 只讀。長整型。返回本會話的會話標識符。每創建一個會話,由服務器自動分配一個標識符??梢愿鶕?br /> 的值判斷兩個用戶是誰先訪問服務器。

  Timeout : 可讀/可寫。整型。為會話定義以分鐘為單位的超時限定。如果用戶在這個時間內沒有刷新或請求任何一個
網頁,則該用戶產生的會話自動結束。缺省值是20。

以上屬性在實際應用中作用不大,而且基本上不需要怎么修改,這幾個屬性也沒什么特殊的地方。

 ?、砈ession對象的方法

  Contents.Remove("變量名"): 從Session.contents集合中刪除指定的變量

  Contents.Removeall() : 刪除Session.contents集合中的所有變量

  Abandon() : 結束當前用戶會話并且撤消當前Session對象。

  Session對象的Contents.Remove("變量名")和Contents.Removeall()方法與Application對象的基本上沒什么區別,為
幫助理解,大家可以參照上面的例子將Application改為Session。這里要說明一下的是Contents.Removeall()和Abandon()
的區別,執行這兩個方法都會釋放當前

  用戶會話的所有Session變量,不同的是Contents.Removeall()單純地釋放Session變量的值而不終止當前的會話,而
Abandon()除了釋放Session變量外還會終止會話引發Session_OnEnd事件,希望大家注意兩者的區別。

 ?、碨ession對象的事件

  OnStart: 當ASP用戶會話產生時觸發,一旦有任一用戶對本服務器請求任一頁面即產生該事件。

  OnEnd : 當ASP用戶會話結束時觸發,當使用Abandon()方法或超時也會觸發該事件。

  這兩個事件和Application的OnStart、OnEnd事件一樣,也是必須放在Global.asa文件里,下
面就重點和大家研究一下這四個事件的使用。

  三、Global.asa

  ASP的Application和Session對象體現了其他ASP內置對象所沒有的特征--事件。每一個訪客訪問服務器時都會觸發一
個OnStart事件(第一個訪客會同時觸發Application和Session的OnStart事件,但Application先于Session),每個訪客
的會話結束時都會觸發一個OnEnd事件(最后一個訪客會話結束時會同時觸發Application和Session的OnEnd事件,但
Session先于Application)。

  OnStart和OnEnd這兩個事件一般應用在虛擬社區中統計在線人數、修改用戶的在線離線狀態等。要具體定義這兩個事
件,需要將代碼寫在Global.asa文件,并將該文件放在站點的根目錄下(缺省是Inetpubwwwroot)。另外,
Application和Session對象規定了在OnEnd事件里除了Application對象外其他ASP內置對象(Response、Request、
Server、Session...)一概不能使用。以下舉一個虛擬社區統計在線人數的例子來說明如何使用這兩個事件。

  文件說明:

  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 在線狀態,是/否

 
  ===global.asa===

 ?。約cript 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")變量記錄已經登錄社區的在線人數,因為一旦有用戶訪問服務器而不管用戶是否
登錄,都會產生OnStart事件,所以不能在OnStart事件里使Applicaiton("online")加一。因為不管是否是登錄用戶的會話
結束都會產生OnEnd事件(假如有訪客訪問了服務器但并不登錄社區,他的會話結束后也會產生OnEnd事件),所以在
Session_OnEnd事件里用了句if語句來判斷是否為已登錄用戶的OnEnd事件,如果是才將在線人數減一。

  這只是一個統計在線人數的簡單例子,對于一個完整的虛擬社區來說,僅僅統計有多少人在線是不夠的,在本例中數
據庫里有個online字段是用來記錄用戶的在線狀態,用戶登錄的時候,在login.asp里將online設為1,但用戶離線時并沒
有將online設為0,要完善它,就要修改一下Session_OnEnd事件,在該事件里將online設為0。

  ===global.sas===

 ?。約cript 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

 ?。迹痵cript>

  ==============

  至此,完整的代碼已經完成了。因為在Application和Session的OnEnd事件里不能使用Server對象,所以要將數據庫的
連接及數據庫在服務器上的物理地址(d:inetpubwwwrootbs.mdb)存儲在application變量中,并在
Application_OnStart事件中預先處理。同理,在Session_OnEnd事件中不能用session("pass")來代替session.contents
("pass")(以下有詳盡說明)。

  四、本文實例中值得引起注意的兩點

 ?、監nEnd事件里的session.contents

  剛開始接觸global.asa的朋友經常會將上面Session_OnEnd事件里的

  if session.contents("pass") then 寫成

  if session("pass") then,

  這樣的話系統不會提示錯誤,但是永遠也不會執行then后面的內容,這是因為在OnEnd事件里禁止使用Session對象,
但是可以用Session對象的集合來調用session變量。因為IIS并沒提示任何錯誤信息,所以筆者曾經在這上面浪費了很多時
間。在此希望大家引以為鑒!

 ?、睞pplication_OnStart事件里用Server.MapPath獲取數據庫的物理地址時應使用絕對地址為了說明這個問題,大家可
以做個實驗:將上面Application_OnStart事件里的

  application("db")=Server.MapPath("bs.mdb")改為:

  application("db")=Server.MapPath("bbs.mdb")

然后在d:inetpubwwwroot目錄下建立一個test子目錄,寫一個temp.asp在test目錄里。

  ====test.asp====

 ?。迹esponse.write application("db")%>

  ================

再將temp.asp拷貝一份放在根目錄下(d:inetpubwwwroot)。用記事本打開global.asa,再打開兩個瀏覽器,瀏覽器A
輸入地址http://localhost/temp.asp,按回車,將在瀏覽器上輸出:

  d:inetpubwwwrootbs.mdb

然后,在記事本的窗口上點"文件"菜單,選"保存"(使global.asa的修改時間改變,從而使IIS重啟動所有服務),再在瀏
覽器B輸入地址http://localhost/test/temp.asp,按回車,在瀏覽器上輸出的是:

  d:inetpubwwwroot estbs.mdb

global.asa文件雖然是放在站點根目錄下,但是如果在server.mappath中使用的是相對地址,而觸發Application_OnStart
事件的用戶第一次訪問的頁面又不是屬于根目錄的話,得到數據庫的物理地址將不會是期望的結果,希望大家要特別小心。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产视频亚洲视频| 视频在线一区二区| 日本一本a高清免费不卡| 在线观看精品自拍私拍| 少妇av一区二区三区| 黑人巨大精品欧美一区免费视频| 欧美午夜www高清视频| 国产又爽又黄的激情精品视频| 欧美日韩午夜剧场| 欧美极品少妇xxxxⅹ免费视频| 7777kkkk成人观看| 亚洲午夜av久久乱码| 色小说视频一区| 亚洲第一区在线| 欧美中文字幕视频在线观看| 欧美成人手机在线| 97国产在线观看| 欧美性生活大片免费观看网址| 亚洲美女av网站| 国产一区二区三区高清在线观看| 国产视频亚洲视频| 亚洲精品国精品久久99热一| 欧美猛少妇色xxxxx| 精品福利免费观看| 91久久精品美女| 亚洲伊人成综合成人网| 成人女保姆的销魂服务| 国产精品成人av在线| 国产精品毛片a∨一区二区三区|国| 国产在线高清精品| 色偷偷88888欧美精品久久久| 欧美精品一本久久男人的天堂| 日韩av手机在线观看| 深夜福利国产精品| 亚洲天堂av电影| 最新国产精品亚洲| 成人欧美一区二区三区黑人孕妇| 国产亚洲日本欧美韩国| 亚洲精品一二区| 不卡伊人av在线播放| 日本亚洲欧洲色α| 精品国产一区二区三区久久| 亚洲精品国产精品国产自| 亚洲韩国青草视频| 这里只有精品在线播放| 亚洲美女av网站| 国产成人av网址| 亚洲天堂av图片| 精品视频—区二区三区免费| www.欧美三级电影.com| 亚洲国产成人久久综合| 国产成+人+综合+亚洲欧洲| 亚洲成**性毛茸茸| 亚洲自拍小视频免费观看| 日韩在线一区二区三区免费视频| 亚洲免费视频网站| 国产精品福利网站| 亚洲国模精品一区| 欧美日韩精品中文字幕| 91中文精品字幕在线视频| 精品久久香蕉国产线看观看亚洲| 7777kkkk成人观看| xxx成人少妇69| 久操成人在线视频| 中文字幕亚洲一区二区三区五十路| 成人免费视频97| 色av吧综合网| 国产精品免费看久久久香蕉| 欧美电影免费看| 成人午夜在线视频一区| 亚洲高清av在线| 亚洲天堂av在线免费观看| 亚洲女人被黑人巨大进入al| 精品一区二区亚洲| 日韩一区二区久久久| 国产成+人+综合+亚洲欧美丁香花| 欧美高跟鞋交xxxxxhd| 国产主播精品在线| 亚洲精品少妇网址| 欧美视频裸体精品| 国产精品免费一区二区三区都可以| 国产精品电影久久久久电影网| 亚洲欧美激情另类校园| 亚洲色图综合久久| 国产精品黄色av| 日韩亚洲精品视频| 91久久夜色精品国产网站| 久久综合伊人77777尤物| 亚洲国产精品嫩草影院久久| 欧美激情精品在线| 久久久成人精品视频| 伊人久久久久久久久久久| 日韩在线观看免费av| 在线亚洲欧美视频| 成人性生交大片免费看小说| 两个人的视频www国产精品| 亚洲va久久久噜噜噜久久天堂| 91在线免费看网站| 成人中文字幕在线观看| 九色精品免费永久在线| 成人在线播放av| 久久久久日韩精品久久久男男| zzjj国产精品一区二区| 国产色婷婷国产综合在线理论片a| 亚洲激情视频网| 国产精品激情自拍| 美日韩精品视频免费看| 亚洲国产精品久久精品怡红院| 欧美激情中文字幕乱码免费| 日韩美女在线看| 国内精品久久久久久久| 亚洲视频欧美视频| 日韩免费在线视频| 精品久久久久人成| 一区国产精品视频| 亚洲成色777777在线观看影院| 国产日本欧美视频| 亚洲精品福利视频| 久久精品亚洲一区| 欧美一区三区三区高中清蜜桃| 韩国欧美亚洲国产| 日韩精品极品毛片系列视频| 国产精品亚洲视频在线观看| 国产成人综合久久| 欧美午夜精品伦理| 久久视频免费在线播放| 91高潮在线观看| 亚洲电影成人av99爱色| 国产精品视频99| 欧美巨大黑人极品精男| 日韩精品视频在线观看网址| 久久久久国色av免费观看性色| 色妞一区二区三区| 亚洲永久在线观看| yw.139尤物在线精品视频| 亚洲国内精品视频| 粉嫩av一区二区三区免费野| www亚洲欧美| 成人黄色av网| 一区二区国产精品视频| 孩xxxx性bbbb欧美| 曰本色欧美视频在线| 日韩电影大全免费观看2023年上| 92版电视剧仙鹤神针在线观看| 欧美激情中文字幕乱码免费| 中文字幕国产亚洲2019| 亚洲国产欧美在线成人app| 欧美成人免费一级人片100| 亚洲品质视频自拍网| 国模叶桐国产精品一区| 国产丝袜精品视频| 伊人av综合网| 国产精品久久99久久| 另类专区欧美制服同性| 久久91亚洲人成电影网站| 91国语精品自产拍在线观看性色| 日本不卡免费高清视频| 亚洲色图综合久久| 欧美亚洲成人xxx| 国产精品第100页| 欧美裸体视频网站| 欧美丝袜一区二区| 国模gogo一区二区大胆私拍| 国产欧美中文字幕|