<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ASP基礎常識概述

    概述
    ASP是Active Server Page的縮寫,意為“活動服務器網頁”。ASP是微軟公司開發的代替CGI腳本程序的一種應用,它可以與數據庫和其它程序進行交互,是一種簡單、方便的編程工具。ASP的網頁文件的格式是.asp,現在常用于各種動態網站中。 ASP是一種服務器端腳本編寫環境,可以用來創建和運行動態網頁或Web應用程序。ASP網頁可以包含HTML標記、普通文本、腳本命令以及COM組件等。利用ASP可以向網頁中添加交互式內容(如在線表單),也可以創建使用HTML網頁作為用戶界面的web應用程序。 與HTML相比,ASP網頁具有以下特點:

    (1)利用ASP可以實現突破靜態網頁的一些功能限制,實現動態網頁技術;

    (2)ASP文件是包含在HTML代碼所組成的文件中的,易于修改和測試;

    (3)服務器上的ASP解釋程序會在服務器端制定ASP程序,并將結果以HTML格式傳送到客戶端瀏覽器上,因此使用各種瀏覽器都可以正常瀏覽ASP所產生的網頁;

    (4)ASP提供了一些內置對象,使用這些對象可以使服務器端腳本功能更強。例如可以從web瀏覽器中獲取用戶通過HTML表單提交的信息,并在腳本中對這些信息進行處理,然后向web瀏覽器發送信息;

    (5)ASP可以使用服務器端ActiveX組件來執行各種各樣的任務,例如存取數據庫、發現哦那個Email或訪問文件系統等。

    (6)由于服務器是將ASP程序執行的結果以HTML格式傳回客戶端瀏覽器,因此使用者不會看到ASP所編寫的原始程序代碼,可防止ASP程序代碼被竊取。




    ASP的工作原理


    當在Web站點中融入ASP功能后,將發生以下事情:

    1、用戶向瀏覽器地址欄輸入網址,默認頁面的擴展名是.asp。

    2、瀏覽器向服務器發出請求。

    3、服務器引擎開始運行ASP程序。

    4、ASP文件按照從上到下的順序開始處理,執行腳本命令,執行HTML頁面內容。

    5、頁面信息發送到瀏覽器。




    ASP的運行環境


    asp需要運行在PWSIIS下。PWS或IIS服務在windows98或windows2000的光盤上附帶著,可以通過“添加/刪除程序”中的“添加/刪除windows組件”來安裝。

    一般asp需與access數據庫或SQL Server數據庫結合使用,編出功能強大的程序。

    能夠運行ASP的web服務器軟件??

    Windows2000默認安裝的是IIS5.0(internet information server),而windows xp默認安裝的是IIS5.1,windows 2003默認安裝的IIS6.0。

    PWS(personal web server)運行在windows98環境下的簡單個人網頁服務器。




    ASP的意涵與特性
    ASP( Application Service Provider,應用軟體租賃服務提供者 )即是指「透過網路以租賃方式提供應用軟體服務的業者」,即是指業者以應用軟體為主體,透過網路一對多地傳遞服務,這種以服務為主的交易模式促使企業可藉由租賃的方式,以更符合成本效益的方式擁有軟體的使用權,并且亦能因為業者集中式的管理而大幅降低企業維護的成本.
    基本上,ASP即具有「軟體服務化,服務網路化」,「資訊委外服務與網路結合」與「產品通路化,通路產品化」等三大特性,其甚至可以被視為是ISP(Internet Service Provider)與ITS(Information Technology Service)的結合.

    ASP的英文是Application Service Provider,中文的標準翻譯就是“應用服務提 供商”,是指為商業或者個人客戶提供管理應用解決方案的公司或者企業。最近 ASP被媒體炒做十分火熱,不是IT行業的人面對一堆技術名詞專業術語很難弄清楚ASP的內容,本文試圖用淺顯的語言來為廣大的讀者揭開ASP神秘的面紗,對于IT行業的大熱門ASP領域有一些基本的認識。??

    1. ASP是什么東西???

    簡單地講,ASP就是為客戶提供服務的服務商,它和會計事物所、婚姻介紹所沒有什么本質方面的區別。不同的是ASP主要是通過INTERNET(國際互聯網絡)作為主要工作和業務工具,采用一對多的方式,向企業、公司提供標準化的應用軟件以及相關的技術咨詢、管理租賃的服務,ASP的概念最早是1998年由美國人提出來的。目前被全球各大IT廠商看好并被認為是可以推動網絡經濟發展的,有穩固基礎的第三種網絡商業模式。??

    和傳統的外包服務(Outsourcing)相比,ASP的主要區別在于:ASP是一對多的經營模式,提供的服務有兼容性和可協調性,并且ASP的收費方式一般是按月收費。
    業界認為:ASP一般有這樣一些“成員”:電信運營商、傳統IT服務廠商、互聯網絡接入服務商(ISP)、獨立軟件供應商(ISV)、系統集成商和單純的ASP公司。

    根據流行的觀點,ASP有如下五個核心內涵:??

    a. ASP著重應用為中心,提供對于應用方面的訪問和管理。??
    b. ASP服務可以為用戶提供沒有在服務器、人員、系統和系統授權等前期資源投入情況下就可以在“定制”的全新應用系統環境進行訪問的服務,如ISP,而這樣的服務一般按月份ASP收取服務費。??
    c. ASP采用集中管理的方式---ASP一般都有一個管理中心,所有的客戶通過INTERNET來進行遠程訪問,獲得技術支持和咨詢服務。??
    d. 一對多的服務,也就是講,ASP提供的是標準化的產品包,產品都是最低程度的自定義或者沒有實現客戶定制化,對于行業用戶來講已經達到實用方便的標準。??
    e. 按照合同交付,在ASP客戶的眼中,ASP是一家根據客戶協議內容提供相關服務,保證應用服務系統服務可以得到確實履行的機構。??

    2. ASP為什么會火?

    從大的方面來講,困擾國內企業生存、發展的核心問題是管理問題。隨著互聯網絡的普及和應用的深入,企業用戶可以隨時隨地直接租用ASP的服務器和軟件系統來進行自己的業務管理,這樣做的好處在于;第一,企業可以節省大筆用于IT建設方面的資金,大幅度降低企業管理信息化的成本。第二,ASP的用戶可以采用各種方式獲得應用和服務,軟件類服務產品完全可以通過網絡在非常短的時間內組成一個完善的、高效的、先進的企業管理系統,迅速獲得企業一體化的運營管理方案。??

    網絡經濟發展突飛猛進,電子商務一日千里,網絡和網站從門戶到內容、從注意力到垂直性,目前逐漸轉向熱衷ASP也是一個主要的原因。??

    筆者資料中,國內最早對ASP觸電的是網友“飛鳥”,在1998年6月自發組織了研究、交流和探討ASP技術的“飛鳥之家”,現在已經發展成為chinaasp.com,成為國內最早的ASP應用技術服務提供商網站。上海的互易網絡有限公司結合國內實際情況,推出了為國內企業服務的ASP平臺互易網,向企業提供以電子商務為核心的,企業內、外部網絡設施和應用的遠程構架和托管服務,創造虛擬企業門戶(EP)直接將ASP應用到商業增殖環節中去。??

    此外,ISP也全面轉向ASP的懷抱,成為ISP進一步發展的產物。軟件商對于ASP更是情有獨鐘。業界最新的消息是,中國第三電信“網通”已經制定ASP發展戰略,國內最大的管理咨詢公司“漢普”將把旗下八個子公司定位在企業內部資源計劃管理(ERP)領域的ASP中,北京“聯成互動”瞄準客戶關系管理(CRM)領域的ASP,北京“數碼方舟”定位在網絡辦公的ASP,HP正在和中國建設銀行討論共建金融領域的ASP。??

    ASP正在IT經濟大潮中顯山露水,其發展前景不可估量。??

    3. ASP的發展階段和面臨的問題??

    以網絡服務商、軟件廠商和ISP為主力的各種IT角色,正在根據自己的優勢條件出發對ASP領域進行多種方面的嘗試。就目前階段來講,ASP提供的服務不計其數五花八門,沒有標準化和量化的概念,硬件廠商向ASP的“土壤”和勢力方向靠攏,軟件廠商和ISP則直接參與到ASP業務的第一線。??

    筆者估計,經過一段時間的試探和發展,ASP將向服務集成方面發展,產品和服務初步的標準化將很快建立起來,接著進入到市場細化和標準制定、ASP產品成熟時期,ASP的穩步增長,最終將成為IT行業商務模式的核心!??

    目前在ASP發展的道路上,主要面臨的問題是觀念的轉變方面:用租賃代替購買,服務集成代替產品經銷商、服務經濟代替產品經濟等等。具體到實際方面來講,安全和服務的質量是ASP和客戶共同關心的頭等大事,要實現ASP提出的“租賃高科技”的口號,ASP任重而道遠!




    ASP常用內置函數

    1,日期/時間函數

    這些函數包括對“年”、“月”、“日”、“時”、“分”、“秒”、“星期”等的顯示。

    (1)Now函數:根據計算機系統設定的日期和時間,返回當前的日期和時間值。使用方法now();

    (2)Date函數:只返回當前計算機系統設定的日期值。使用方法:date();

    (3)Time函數:只返回當前計算機系統設定的時間值。使用方法:time();

    (4)Year函數:返回一個代表某年的整數。使用方法:year(date),其中date參數是任意的可以代表日期的參數,比如“year(date())”就表示是從“date()”得出的日期中提取其中“年”的整數。

    另外,還可以這樣應用:“year(#5 20,2006#)”表示提取“2006年5月20日”中“年”的整數值。關于“5 20,2006”,也可使用“5-20-2006”、“5/20/2006”等形式表現,即“某月某日”和“某年”的組合。同時注意使用“#”進行包括以表示日期值。

    (5)Month函數:返回1到12之間的整數值,表示一年中某月。使用方法:month(date)。關于參數date的說明和year函數相同。但要注意日期的正確性,比如“#13-31-2006#”,根本就沒有“13”月,肯定是錯誤的了。

    (6)Day函數:返回1到31之間的整數值,表示一個月中的某天。使用方法:day(date)。關于參數date的說明和year函數相同。同樣要注意日期的正確性,比如“#2-30-2006#”其中對“2”月定義的“30”日這天就是錯誤的。

    (7)Hour函數:返回0到23之間的整數值,表示一天中的某個小時。使用方法:hour(time)。其中參數time是任意的可代表時間的表達式。比如“hour(time())”就表示是從“time()”得出的時間中提取其中“小時”的整數。同樣,參數time還可以這樣應用“hour(#11:45:50#)”表示從“11”時“45”分“50”秒中提取當前小時數。當然,定義的時間要符合時間的規范。

    (8)Minute函數:返回0到59之間的整數值,表示一小時中的某分鐘。使用方法:minute(time)。time參數的說明和hour函數相同。

    (9)Second函數:返回0到59之間的整數值,表示一分鐘中的某秒。使用方法:second(time)。time參數的說明和hour函數相同。

    (10)Weekday函數:返回一個星期中某天的整數。使用方法:weekday(date)。關于參數date的說明和year函數相同。該函數返回值為“1”到“7”,分別代表“星期日”、“星期一”……“星期六”。比如當返回值是“4”時就表示“星期三”。

    (11)WeekDayName函數:返回一個星期中具體某天的字符串。相對weekday函數而言即翻譯出“星期幾”,使用方法:weekdayname(weekday)。參數weekday即星期中具體某天的數值。比如“weekdayname(weekday(date()))”就表示當前是“星期幾”。因為“date()”表示的是當前的時間,而“weekday(date())”就表示的是一星期中具體某天的整數。

    當然weekdayname函數最終顯示的字符串內容還與當前操作系統語系有關,比如中文操作系統將顯示“星期一”這類的中文字符,而英文操作系統則顯示為“Mon”(Monday簡寫)。

    此外,在VBScript中還有一些關于時間間隔的計算函數:

    (1)DateAdd函數:返回指定時間間隔的日期、時間。可以計算出相隔多少年、或相隔幾個月、又或相隔幾個小時等的新日期、時間。使用方法:dateadd(interval, number, date)。

    其中參數interval表示需要添加的時間間隔單位。其是以字符串的形式表達的,比如“yyyy”表示年,“q”表示季度,“m”表示月份,“d”表示天數,“ww”表示周數,“h”表示小時數,“n”表示分鐘數,“s”表示秒數。

    而參數number則表示添加的時間間隔數。其是以數值的形式表達的,可以為負值。參數date則要求是日期、時間的正確格式。

    比如dateadd("d",100,"2006-5-20")就表示2006年5月20號以后的100天的日期值:2006-8-28。再比如dateadd("h",-12,"2005-5-20 10:00:00")就表示2005年5月20號上午10點前的12小時的日期時間:2005-5-19 22:00:00。

    (2)DateDiff函數:返回兩個日期時間之間的間隔。可計算出兩個日期相隔的年代、小時數等。使用方法:datediff(interval,date1,date2)。

    參數interval和dateadd函數中的interval參數內容描述相同,date1和date2參數分別就是相互比較的兩個日期時間。另外,當date1的日期時間值大于date2時,將顯示為負值。

    比如DateDiff("yyyy","1982-7-18",date)表示某人的出生到現在已經多少年了。又比如DateDiff("d","1982-7-18","2062-7-18")則計算了80年過了多少天:29220。

    2,字符串處理函數

    在腳本的功能處理中,通常需要對一些字符串進行一些修飾性處理。比如過濾掉字符串中的敏感字眼以符合最終顯示的要求;又比如一段較長的字符串,需要提取開頭的幾個字符時。

    (1)Asc函數:返回字符串中第一個字母對應的ANSI字符代碼。使用方法:asc(string)。其中string參數表示字符串。

    (2)Chr函數:返回指定了ANSI 字符代碼對應的字符。使用方法:chr(chrcode)。參數chrcode是相關的標識數字。該函數的功能和asc函數形成對應。

    比如:asc(“a”)表示小寫字母“a”的ANSI 字符“97”;同樣chr(97)表示的就是“小寫字母a”。另外chr(chrcode)中參數chrcode值為0到31的數字時,表示不可打印的ASCII碼。比如“chr(10)”表示換行符,“chr(13)”表示回車符等,這常用于輸入和顯示格式的轉換中。

    (3)Len函數:返回字符串內字符的數目(字節數)。使用方法:len(string)。比如len(“love”)的值就是4。

    (4)LCase函數:返回所有字符串的小寫形式。使用方法:lcase(string)。比如lcase(“CNBruce”)返回為“cnbruce”。

    (5)UCase函數:返回所有字符串的大寫形式。與lcase函數形成對應。同樣,ucase(“CNBruce”)返回為“CNBRUCE”。

    (6)Trim函數、LTrim函數和RTrim函數:分別返回前導和后續不帶空格、前導不帶空格或后續不帶空格的字符串內容。比如:

    trim(“ cnbruce ”)返回為“cnbruce”,前導和后續都不帶空格;
    ltrim(“ cnbruce ”)返回為“cnbruce ”,前導不帶空格;
    rtrim(“ cnbruce ”)返回為“ cnbruce”,后續不帶空格;

    該函數常用于注冊信息中,比如確保注冊用戶名前或后的空格。

    (7)Left函數:返回從字符串的左邊算起的指定數目的字符。使用方法:left(string,length)。比如left(“brousce”,5)返回為“brous”,即前五位字符。

    (8)Right函數:返回從字符串的左邊算起的指定數目的字符。使用方法:right(string,length)。比如right(“brousce”,4)返回為“usce”,即后四位字符。

    (9)instr函數:返回某字符串在另一字符串中第一次出現的位置。比如現在查找字母“A”在字符串“A110B121C119D1861”中第一次出現的位置,則可以 instr(my_string,"A110B121C119D1861")

    (10)Mid函數:從字符串中返回指定數目的字符。比如現在的“110”則應該是從字符串“A110B121C119D1861”的第2位取得3個單位的值:mid("A110B121C119D1861",2,3)

    (11)Replace函數:在字符串中查找、替代指定的字符串。replace(strtobesearched,strsearchfor,strreplacewith)其中strtobesearched是字符串,strsearchfor是被查找的子字符串,strreplacewith是用來替代的子字符串。比如 replace(rscon,"<","<") 則表示將rscon中所有“<”的字符替換為“<”

    3,類型轉換函數

    Cbool(string) 轉換為布爾值
    Cbyte(string) 轉換為字節類型的值
    Ccur(string) 轉換為貨幣類值
    Cdate(string) 轉換為日前類型的值
    Cdbl(string) 轉換為雙精度值
    Cint(string) 轉換為整數值
    Clng(string) 轉換為長整型的值
    Csng(string) 轉換為單精度的值
    Cstr(var) 轉換為字符串值
    Str(var) 數值轉換為字符串
    Val(string) 字符串轉換為數值

    4,運算函數

    Abs(nmb) 返回數子的絕對值
    Atn(nmb) 返回一個數的反正切
    Cos(nmb) 返回一個角度的余炫值
    Exp(nmb) 返回自然指數的次方值
    Int(nmb) 返回數字的整形(進位)部份
    Fix(nmb) 返回數字的整形(舍去)部份
    Formatpercent(表達式) 返回百分比
    Hex(nmb) 返回數據的16進制數
    Log(nmb) 返回自然對數
    Oct(nmb) 返回數字的8進制數
    Rnd 返回大于“0”而小于“1”的隨機數,但此前需 randomize 聲明產生隨機種子
    Sgn(nmb) 判斷一個數字的正負號
    Sin(nmb) 返回角度的正鉉值
    Sqr(nmb) 返回數字的二次方根
    Tan(nmb) 返回一個數的正切值

    5,其他函數

    IsArray(var) 判斷一個變量是否是數組
    IsDate(var) 判斷一個變量是否是日期
    IsNull(var) 判斷一個變量是否為空
    IsNumeric(var) 判斷表達式是否包含數值
    IsObject(var) 判斷一個變量是否是對象
    TypeName(var) 返回變量的數據類型
    Array(list) 返回數組
    Split(liststr) 從一個列表字符串中返回一個一維數組
    LBound(arrayP 返回數組的最小索引
    Ubound(array) 返回數組的最大索引
    CreateObject(class) 創建一個對象
    GetObject(pathfilename) 得到文件對象




    ASP中Application和Session對象

    一、Application對象的成員概述

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

      ⒈Application對象的集合

      Contents集合:沒有使用元素定義的存儲于Applicaiton對象中的所有變量的集合
      StaticObjects:使用元素定義的存儲于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")的方法,因為這樣更為直觀,如果用序號來表示的話則要考慮賦值的先后順序。

      ⒉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事件所有代碼已經執行完畢后發生,或最后一個用戶訪問服務器一段時間(一般為20分鐘)后仍然沒有人訪問該服務器產生。
      想要定義application對象的OnStart和OnEnd事件里做什么需要將代碼寫在Global.asa這個文件里(下文有舉例),并且將該文件放在站點的根目錄下(一般是Inetpub\wwwroot\)

      二、Session對象的成員概述

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

      ⒈Session對象的集合

      Contents :沒有使用元素定義的存儲于特定Session對象的所有變量的集合。
      StaticObject:使用元素定義的、存儲于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: 只讀。長整型。返回本會話的會話標識符。每創建一個會話,由服務器自動分配一個標識符。可以根據它的值判斷兩個用戶是誰先訪問服務器。
      Timeout : 可讀/可寫。整型。為會話定義以分鐘為單位的超時限定。如果用戶在這個時間內沒有刷新或請求任何一個網頁,則該用戶產生的會話自動結束。缺省值是20。
    以上屬性在實際應用中作用不大,而且基本上不需要怎么修改,這幾個屬性也沒什么特殊的地方。

      ⒊Session對象的方法

      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事件,希望大家注意兩者的區別。

      ⒋Session對象的事件

      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文件,并將該文件放在站點的根目錄下(缺省是\Inetpub\wwwroot\)。另外,Application和Session對象規定了在OnEnd事件里除了Application對象外其他ASP內置對象(Response、Request、Server、Session...)一概不能使用。以下舉一個虛擬社區統計在線人數的例子來說明如何使用這兩個事件。

      文件說明:
      global.asa 位于d:\Inetpub\wwwroot\目錄下
      default.asp 位于d:\Inetpub\wwwroot\目錄下,虛擬社區登錄頁面
      login.asp 位于d:\Inetpub\wwwroot\目錄下,用于檢測用戶輸入的用戶名及密碼
      index.asp 位于d:\Inetpub\wwwroot\目錄下,虛擬社區首頁
      bbs.mdb 位于d:\Inetpub\wwwroot\目錄下,存儲用戶信息的數據庫

      數據庫(ACCESS)結構:
       ===bbs表===
      id 用戶ID,長整型
      name 用戶名,文本型
      code 密碼,文本型
      online 在線狀態,是/否
     ??===global.asa===
      <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")變量記錄已經登錄社區的在線人數,因為一旦有用戶訪問服務器而不管用戶是否登錄,都會產生OnStart事件,所以不能在OnStart事件里使Applicaiton("online")加一。因為不管是否是登錄用戶的會話結束都會產生OnEnd事件(假如有訪客訪問了服務器但并不登錄社區,他的會話結束后也會產生OnEnd事件),所以在Session_OnEnd事件里用了句if語句來判斷是否為已登錄用戶的OnEnd事件,如果是才將在線人數減一。
      這只是一個統計在線人數的簡單例子,對于一個完整的虛擬社區來說,僅僅統計有多少人在線是不夠的,在本例中數據庫里有個online字段是用來記錄用戶的在線狀態,用戶登錄的時候,在login.asp里將online設為1,但用戶離線時并沒有將online設為0,要完善它,就要修改一下Session_OnEnd事件,在該事件里將online設為0。
      ===global.sas===
      <script LANGUAGE="VBScript" RUNAT="Server">
      Sub Application_OnStart
       application("online")=0
       set application("conn")=Server.CreateObject("ADODB.Connection")
       application("db")=Server.MapPath("\bbs.mdb") '此處最好使用絕對路徑\bbs.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對象,所以要將數據庫的連接及數據庫在服務器上的物理地址(d:\inetpub\wwwroot\bbs.mdb)存儲在application變量中,并在Application_OnStart事件中預先處理。同理,在Session_OnEnd事件中不能用session("pass")來代替session.contents("pass")(以下有詳盡說明)。
      四、本文實例中值得引起注意的兩點

      ⒈OnEnd事件里的session.contents
      剛開始接觸global.asa的朋友經常會將上面Session_OnEnd事件里的
      if session.contents("pass") then 寫成
      if session("pass") then,

      這樣的話系統不會提示錯誤,但是永遠也不會執行then后面的內容,這是因為在OnEnd事件里禁止使用Session對象,但是可以用Session對象的集合來調用session變量。因為IIS并沒提示任何錯誤信息,所以筆者曾經在這上面浪費了很多時間。在此希望大家引以為鑒!
      ⒉Application_OnStart事件里用Server.MapPath獲取數據庫的物理地址時應使用絕對地址為了說明這個問題,大家可以做個實驗:將上面Application_OnStart事件里的
      application("db")=Server.MapPath("\bbs.mdb")改為:
      application("db")=Server.MapPath("bbs.mdb")

    然后在d:\inetpub\wwwroot\目錄下建立一個test子目錄,寫一個temp.asp在test目錄里。
      ====test.asp====
      <%response.write application("db")%>
      ================

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

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

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

    類別:Web | 編輯 | 刪除

    | 評論(0) | 瀏覽(0)

    全面解析ASP Server對象
    2007-07-27 12:40
    Server對象提供對服務器上訪問的方法和屬性.大多數方法和屬性是作為實用程序的功能提供的。
      語法:
       Server.property|method
      屬性(property)
       Server對象只有一個屬性:ScriptTimeout 程序能夠運行的最大時間
      方法(Methods)
       CreateObject 建立一個對象實例.
       Execute 執行一個asp文件
       GetLastError 返回一個錯誤代碼
       HTMLEncode 對指定的HTML代碼進行轉換.
       MapPath 將一個相對路徑轉化為一個絕對路徑.
       Transfer 將當前的所有狀態信息發送給另一個asp文件
       URLEncode 以URL形式轉化指定的代碼,包括空格
      Server對象的方法詳細說明
       CreateObject
       語法
       Server.CreateObject( progID )
       參數
        progID
        指定要創建的組件名稱,格式如下: [Vendor.]Component[.Version].
       要點:
        一般來說,用由Server.CreateObject方法創建的對象擁有頁面的范圍.這就說,當這頁的asp程序執行完后,這種對象會自動地消失.
      為了創建一個擁有Session或Application范圍的對象,你可以在Global.asa文件中使用
      Execute
      Execute 方法呼叫一個ASP文件并且執行它就像這個呼叫的ASP文件存在這個ASP文件中一樣。這很像許多語言中的類的調用。
      語法
      Server.Execute( Path )
      參數
       Path
      指定執行的那個asp文件的路徑。如是它是一個絕對路徑,那么它必須是一個在這個ASP應用程序相同的地方(目錄)。
      講解
      Server.Execute 方法提供了一種將一個復雜ASP應用程序分化為小塊單位來執行的方法。通過這種方法,你能夠建一個ASP圖書館,你能夠隨便在你需要時調用你圖書館中的ASP文件。這個就有點像SSI了!嘿嘿!
      當IIS根據指定的ASP文件路徑執行完這個ASP文件之后,就會自動返回以前的ASP文件。這個剛剛執行完的ASP文件有可能改變了HTTP head.但是和其它的ASP文件一樣,當程序試圖改變http head時,就會報錯!
      這個path參數可以包括一個詢問信息。
      如果在被呼叫和呼叫的ASP文件中都含有相同的子函數,那么這些子函數只在本ASP文件中起作用。舉個例子,如果在下面的ASP1和ASP2兩個文件中都含有放棄程序的子函數。首先ASP1呼叫ASP2,那么ASP2中的的OnTransactionAbort開始執行,當ASP2執行完畢,ASP1中的OnTransactionAbort才開始執行。
     
     ASP1:
    < %@ Transaction=
    Required
    %>
    < %
     Server.Execute ("Page22.asp")
     Sub OnTransactionAbort
     Sub OnTransactionCommit
    %>
      
    Asp2.asp:
    < %@
     Transaction=Required
     Sub OnTransactionAbort
     Sub OnTransactionCommit
    %>

      Example
      
    ASP1
    < % Response.Write("I am going to execute ASP2 ")
    Server.Execute("/myasps/asp2.asp")
    %>
    ASP2
    < % Response.Write("Here I am")%>

      GetLastError
      GetLastError 方法返回一個ASPError Object 來描述一個錯誤信息.這個方法只適用于在asp文件發送任何內容給用戶機之前.
      語法
      Server.GetLastError ()
      要點
      如果一個500;100 用戶錯誤已經被定義在一個asp應用程序中,它是指的一個以.asp為后綴的文件。這種情況下,在這個程序運行時當一個錯誤發生時,服務器就會自動的以Server.Transfer這種方式傳送到這個正在執行的ASP頁面。ASP應用程序就會將有效的處理這個錯誤。另外,這個ASPError Object一定要有效,這樣你就能夠看到服務器提供給你的錯誤信息來改這個文件了!
      一般的Web Site 都是根據文件\iishelp\common\500-100.asp來構造的。你能夠用它來執行一個asp錯誤,當然你能夠自己定義了!。如果你想改變為另外一個asp文件的來執行這些用戶錯誤。那么你可以用IIS中的snap-in.
      注意:當IIS發現了一個asp文件或者global.asa文件中的一個錯誤,那么一個500;100用戶錯誤產生。以下的程序將不能執行!
      Example
      下面的三個例子證明不同的錯誤會產生的用戶錯誤。三個錯誤是:
      編譯錯誤
      運行錯誤
      邏輯錯誤
      第一個例子證明了一個編譯錯誤,就是當IIS試圖包含一個文件時產生的。這個錯誤會產生是因為在這個包含文件中沒有定義所需的參數。第二個例子顯示的是一個運行錯誤,這個程序中斷的原因是程序中沒有“next".第三個例子顯示的是一個邏輯錯誤,因為這個程序試圖除以一個0. 不行啦! 
      
    Example 1
    < %
      response.write "hello"
    %>
    Example 2
    < %
      dim I
      for i=1 to 1
      nxt
    %>
    Example 3

    < %
      dim i,j
      dim sum
      sum=0
      j=0
      for i=1 to 10
       sum=sum+1
      next
      sum=sum/j
    %>
      HTMLEncode
      HTMLEncode方法對指定的字符串進行HTML編碼.
      語法
       Server.HTMLEncode( string )
      參數
       string 要進行編碼的字符
      例子
       下面的程序:
      < %= Server.HTMLEncode("The paragraph tag: ") %>

      輸出為:
      The paragraph tag:
      注意 程序執行后在瀏覽器中看到的是:
      The paragraph tag:
      但是如果你用"查看源文件"看一下的話,源代碼就不是了.
    MapPath
      MapPath 方法將相對路徑轉化為服務器上的物理路徑
      語法
      Server.MapPath( Path )

      參數
      Path
      相對路徑。這個路徑是以"/"或"\"開頭的路徑,如果這個路徑中沒有"\",那么MapPath方法就會返回以當前目錄為基礎的路徑。
      講解
      MapPath 方法不能檢查路徑在這個服務器下是否存在。因為 MapPath 轉化路徑時是不管這個路徑是否在這個服務器下存在的。
      你能夠用它來將一個相對路徑轉化為一個物理路徑,然后再在這個路徑下進行各種操作。
      Example
      在下面的例子中,data.txt文件存在 C:\Inetpub\Wwwroot\Script 目錄中,而且一個test.asp 文件包括下面的代碼。C:\Inetpub\Wwwroot 是該服務器的主目錄 。
      下面的例子中,首先用環境變量"PATH_INFO"獲得當前文件的物理路徑。
      下面是Script 代碼:
      < %= server.mappath(Request.ServerVariables("PATH_INFO"))%>

      顯示為:
      c:\inetpub\wwwroot\script\test.asp
      因為下面的例子中路徑參數沒有以"/"開頭,所以它是以當前目錄轉化的,asp文件是放在C:\Inetpub\Wwwroot\Script中的.以下是 scripts的內容:
      < %= server.mappath("data.txt")%>
      < %= server.mappath("script/data.txt")%>

      顯示為:
      c:\inetpub\wwwroot\script\data.txt
      c:\inetpub\wwwroot\script\script\data.txt

      以下的兩個例子是以"/"開頭的.以下是scripts的內容:
      < %= server.mappath("\script")%>

      顯示為:
      c:\inetpub\wwwroot\script\data.txt
      c:\inetpub\wwwroot\script

      直接用"/"或"\"就會得到服務器的主目錄:
      < %= server.mappath("\")%>

      顯示為:
     
      c:\inetpub\wwwroot
      c:\inetpub\wwwroot

      Transfer
      transfer 方法會把一個正在執行的asp文件的所有信息傳給另外一人asp文件。
      語法
      Server.Transfer (path)

      參數
      Path
      將要接收信息的asp文件的位置。
      要點
      當你調用Server.Transfer時,所有內建對象的狀態信息都會包含在這次傳送之中。這就是說,所有在保存在Session或Application中的信息都會被傳送,而且,所有當前請求的信息都會被接收信息的asp文件所接受。
      Example
      下面的例子示范了從一個asp文件傳送到另一個asp文件例子!
      ASP1

    < % Dim sessvar1 Response.Write Session.SessionID
     Response.Write ("")
     Response.Write("I am going to ASP2 ")
     Server.
    Transfer
    ("/Myasps/ASP2.asp")
    % >
     
     ASP2
    < % Response.Write Session.SessionID %>
      URLEncode
      URLEncode 方法可以將指定字符串進行URL編碼。
      語法
      Server.URLEncode( string )

      參數
      string 指定要轉化的字符串
      Example
      下面是代碼:
      < % Respones.Write(Server.URLEncode("http://www.microsoft.com")) % >

      顯示為:
      http%3A%2F%2Fwww%2Emicrosoft%2Ecom
      屬性:ScriptTimeout
      ScriptTimeout 屬性規定了程序的最大運行時間。
      語法
      Server.ScriptTimeout = NumSeconds

      參數
      NumSeconds
      規定了程序的最大的運行時間(以秒計算)。缺省值是90秒
      Remarks
      一個缺省的Scritpt Timeout的值會能過ASPScriptTimeOUT屬性來設置在Web sertvic 或 Web server上。在程序中,ScriptTimeout屬性的值不能小于這個缺省值。舉個例子吧,如果NumSeconds我們設置為10秒,而缺省值為90秒,那么程序就會中止在90秒以后,而不是10秒以后的。同樣,如果我們設置ScriptTimeout的值為100秒,那么,程序就會在100秒之后中止,而不是90秒。
      Example
      下面的例了中程序將被設置為100秒后自動中止。
      < % Server.ScriptTimeout = 100 %>

      下面的例子中將重新得到ScriptTimeout的值,然后把它存在Timout變量中
      < % TimeOut = Server.ScriptTimeout %>




    ASP內置對象Request的ServerVariables集合列表




    Request.ServerVariables("Url")
    返回服務器地址

    Request.ServerVariables("Path_Info")
    客戶端提供的路徑信息

    Request.ServerVariables("Appl_Physical_Path")
    與應用程序元數據庫路徑相應的物理路徑

    Request.ServerVariables("Path_Translated")
    通過由虛擬至物理的映射后得到的路徑

    Request.ServerVariables("Script_Name")
    執行腳本的名稱

    Request.ServerVariables("Query_String")
    查詢字符串內容

    Request.ServerVariables("Http_Referer")
    請求的字符串內容

    Request.ServerVariables("Server_Port")
    接受請求的服務器端口號

    Request.ServerVariables("Remote_Addr")
    發出請求的遠程主機的IP地址

    Request.ServerVariables("Remote_Host")
    發出請求的遠程主機名稱

    Request.ServerVariables("Local_Addr")
    返回接受請求的服務器地址

    Request.ServerVariables("Http_Host")
    返回服務器地址

    Request.ServerVariables("Server_Name")
    服務器的主機名、DNS地址或IP地址

    Request.ServerVariables("Request_Method")
    提出請求的方法比如GET、HEAD、POST等等

    Request.ServerVariables("Server_Port_Secure")
    如果接受請求的服務器端口為安全端口時,則為1,否則為0

    Request.ServerVariables("Server_Protocol")
    服務器使用的協議的名稱和版本

    Request.ServerVariables("Server_Software")
    應答請求并運行網關的服務器軟件的名稱和版本

    Request.ServerVariables("All_Http")
    客戶端發送的所有HTTP標頭,前綴HTTP_

    Request.ServerVariables("All_Raw")
    客戶端發送的所有HTTP標頭,其結果和客戶端發送時一樣,沒有前綴HTTP_

    Request.ServerVariables("Appl_MD_Path")
    應用程序的元數據庫路徑

    Request.ServerVariables("Content_Length")
    客戶端發出內容的長度

    Request.ServerVariables("Https")
    如果請求穿過安全通道(SSL),則返回ON如果請求來自非安全通道,則返回OFF

    Request.ServerVariables("Instance_ID")
    IIS實例的ID號

    Request.ServerVariables("Instance_Meta_Path")
    響應請求的IIS實例的元數據庫路徑

    Request.ServerVariables("Http_Accept_Encoding")
    返回內容如:gzip,deflate

    Request.ServerVariables("Http_Accept_Language")
    返回內容如:en-us

    Request.ServerVariables("Http_Connection")
    返回內容:Keep-Alive

    Request.ServerVariables("Http_Cookie")

    Request.ServerVariables("Http_User_Agent")
    返回內容:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)

    Request.ServerVariables("Https_Keysize")
    安全套接字層連接關鍵字的位數,如128

    Request.ServerVariables("Https_Secretkeysize")
    服務器驗證私人關鍵字的位數如1024

    Request.ServerVariables("Https_Server_Issuer")
    服務器證書的發行者字段

    Request.ServerVariables("Https_Server_Subject")
    服務器證書的主題字段

    Request.ServerVariables("Auth_Password")
    當使用基本驗證模式時,客戶在密碼對話框中輸入的密碼

    Request.ServerVariables("Auth_Type")
    是用戶訪問受保護的腳本時,服務器用於檢驗用戶的驗證方法

    Request.ServerVariables("Auth_User")
    代證的用戶名

    Request.ServerVariables("Cert_Cookie")
    唯一的客戶證書ID號

    Request.ServerVariables("Cert_Flag")
    客戶證書標志,如有客戶端證書,則bit0為0如果客戶端證書驗證無效,bit1被設置為1

    Request.ServerVariables("Cert_Issuer")
    用戶證書中的發行者字段

    Request.ServerVariables("Cert_Keysize")
    安全套接字層連接關鍵字的位數,如128

    Request.ServerVariables("Cert_Secretkeysize")
    服務器驗證私人關鍵字的位數如1024

    Request.ServerVariables("Cert_Serialnumber")
    客戶證書的序列號字段

    Request.ServerVariables("Cert_Server_Issuer")
    服務器證書的發行者字段

    Request.ServerVariables("Cert_Server_Subject")
    服務器證書的主題字段

    Request.ServerVariables("Cert_Subject")
    客戶端證書的主題字段

    Request.ServerVariables("Content_Type")
    客戶發送的form內容或HTTPPUT的數據類型

    posted on 2008-04-08 19:28 金家寶 閱讀(230) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 中文字幕乱码免费视频| 国产永久免费高清在线| 在线观看免费人成视频色9| 人人狠狠综合久久亚洲婷婷| jizz免费观看| 亚洲国产精品国产自在在线| 黄页视频在线观看免费| 色视频色露露永久免费观看| 亚洲欧美成人综合久久久| 毛片基地免费观看| 亚洲精品无码高潮喷水A片软| 国产精品免费看香蕉| 真正全免费视频a毛片| 国产成人A亚洲精V品无码 | 亚洲视频精品在线| 亚洲免费在线视频观看| 久久久久精品国产亚洲AV无码| 永久免费的网站在线观看| 美景之屋4在线未删减免费 | 十八禁无码免费网站| 久久亚洲熟女cc98cm| 久久WWW免费人成人片| 国产午夜亚洲精品不卡免下载| 亚洲裸男gv网站| 久久aa毛片免费播放嗯啊| 亚洲最新在线视频| 日韩特黄特色大片免费视频| 男女男精品网站免费观看| 亚洲国产精品无码久久一线| 91精品成人免费国产片| 精品国产日韩亚洲一区91| 亚洲午夜国产精品无码| 日本XXX黄区免费看| 曰批全过程免费视频观看免费软件| 一本久久a久久精品亚洲| 亚洲成人免费电影| 深夜a级毛片免费无码| 亚洲AV无码成人网站久久精品大| 无遮免费网站在线入口| www在线观看播放免费视频日本| 久久精品国产亚洲AV大全|