【正文】
n對象,Session對象在ASP程序編寫中占了相當(dāng)重的份量,由于網(wǎng)頁是一種無狀態(tài)的程序,因此幾乎無法知道用戶的瀏覽狀態(tài)。換而言之,每一個Session的用戶,Web服務(wù)器均會自動的為它們建立一個Session。 數(shù)據(jù)庫技術(shù)在基于微軟IIS/PWS的網(wǎng)絡(luò)平臺上,通過服務(wù)器端運行的ASP程序來訪問后臺數(shù)據(jù)庫,是一種最常見的模式了。由于Access數(shù)據(jù)庫的ODBC驅(qū)動程序支持的SQL指令全,執(zhí)行效率高,所以Access后臺數(shù)據(jù)庫+ASP服務(wù)器端程序+客戶端IE瀏覽器,是一個精練實用高效的組合模式。它由大約30條命令構(gòu)成,但實際只需要少數(shù)的幾個命令就可以完成相當(dāng)多的工作,常用的SQL查詢命令有:Select、Insert、Delete、Update等。MD5,即“MessageDigest Algorithm 5(信息摘要算法)”,以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經(jīng)過一系列的處理后,算法的輸出由四個32位分組組成,將這四個32位分組級聯(lián)后將生成一個128位的散列值。又因為該算法是單向加密的,沒有解密算法,然而MD5算法對同一段明文加密得出的密文是唯一且相同的,相當(dāng)于這段數(shù)據(jù)的數(shù)據(jù)指紋,所以當(dāng)有數(shù)據(jù)要和保存的數(shù)據(jù)進(jìn)行比較時,便可通過將需要對比的數(shù)據(jù)進(jìn)行MD5加密后再對比。系統(tǒng)運行環(huán)境:本系統(tǒng)是在windows 2003 server操作系統(tǒng)下,搭建IIS系統(tǒng)運行平臺,使用DREAMWEAVER和Frontpage作為開發(fā)工具開發(fā)的,數(shù)據(jù)庫使用ACCESS 2003。其中輔助功能區(qū)包括用戶舉報模塊以及分屏等操作功能,功能結(jié)構(gòu)圖如圖21所示。(2)用戶密碼修改模塊當(dāng)用戶不小心忘記或記錯了自己的注冊密碼時,可通過修改密碼,重新設(shè)定登陸密碼,其中要經(jīng)過密碼提示問題的驗證,順利通過才能修改密碼。發(fā)言的顏色和發(fā)言表情通過下拉式組合框?qū)崿F(xiàn)。(4)聊天內(nèi)容顯示模塊主要完成將每個用戶的發(fā)言的內(nèi)容顯示在頁面中,讓這些內(nèi)容對每個登陸用戶均可見(除開私聊內(nèi)容),同時還能及時顯示各用戶的發(fā)言內(nèi)容,以便始終能顯示出最新的發(fā)言內(nèi)容。每個顯示用戶應(yīng)設(shè)置為一個超鏈接,當(dāng)單擊用戶名時,實現(xiàn)將發(fā)言區(qū)中的發(fā)言對象設(shè)置為該用戶。同時為用戶提供了舉報的流言功能。聊天室系統(tǒng)的總體流程由用戶登陸開始,通過驗證后,用戶便可進(jìn)入聊天頁面進(jìn)行交流聊天,同時,系統(tǒng)會將新登陸用戶的用戶名添加進(jìn)在線用戶列表,即時更新。用戶登錄統(tǒng)計在線人數(shù)、在用戶列表和發(fā)言數(shù)組中添加新用戶和公告信息。表baseuser表 投訴驗證用戶名密碼問題答案性別levesdatedatequestionIDUsername1username圖31 數(shù)據(jù)庫ER圖ER(EneityRelationship Approach)圖是最常用的概念模型表示方法,也是數(shù)據(jù)庫的核心和基礎(chǔ),它是按用戶的觀點來對數(shù)據(jù)和信息建模的。Baseuser表用于存放注冊用戶的基本信息,其具體字段設(shè)計如表32所示。表33 投訴表字段字段名數(shù)據(jù)類型長度是否允許為空說明ID自動編號Username文本16否投訴人用戶名Username1文本16否被投訴人用戶名Qusetion文本50否投訴描述Date時間10否投訴時間 數(shù)據(jù)庫鏈接的實現(xiàn)數(shù)據(jù)庫連接操作是一個相當(dāng)頻繁的操作,在ASP的數(shù)據(jù)庫編程中,connection對象是我們不可能離開的一個對象,該對象是ADO對象模塊中的一個專門打開和關(guān)閉數(shù)據(jù)庫連接的對象,在對數(shù)據(jù)庫進(jìn)行任何的操作,比如更新記錄,插入,刪除,檢索等,都必須以connection對象的建立為前提。這里首先利用connection對象的屬性ConnStr 設(shè)置數(shù)據(jù)庫的連接方式,使用的是Access OLE DB驅(qū)動程序。DefaultDir=。set conn=() connstr其中,(Path)方法,作用是將(path)指定的虛擬路徑轉(zhuǎn)換為實際路徑,大大提高了本系統(tǒng)的移植性。. 設(shè)計要求是: 1 activetable表 記錄當(dāng)前在線的用戶。 3 user 表 當(dāng)前所有注冊用戶的信息。一個連接是指一種虛擬的表,這種表是在當(dāng)用戶要求從相互關(guān)聯(lián)的各個不同的表中獲取信息時建立的,關(guān)鍵字段用于在相互連接的不同表中查找匹配的記錄。這種連接是指一個表被連接到它自己的一個字段,或在不同的紀(jì)錄中由重復(fù)數(shù)據(jù)的組合字段。在表中使用的關(guān)鍵字類型用于描述庫表示什么以及在數(shù)據(jù)庫中如何與其它的庫建立關(guān)系。DBQ=amp。amp。 (數(shù)據(jù)庫所在路徑)第4章 系統(tǒng)功能具體實現(xiàn)聊天室的功能主要是實現(xiàn)用戶的發(fā)言和觀看大家發(fā)言的內(nèi)容,發(fā)言界面和聊天內(nèi)容需要顯示在同一屏界面中,以方便發(fā)言和觀看,另外,通常還需要顯示當(dāng)前在線的人數(shù)和用戶列表,以方便選擇對誰發(fā)言??蚣芗嵌鄠€框架的集合,每一個框架可顯示一個頁面的內(nèi)容,在同一屏中需要顯示多少個頁面,就需要創(chuàng)建一個具有多少個框架的框架集來實現(xiàn),整個框架集最后存盤形成一個頁面,以后瀏覽該頁面時,各框架集中的內(nèi)容就會自動顯示出來。其中,在進(jìn)行表單傳遞的時候,系統(tǒng)還調(diào)用了check()函數(shù)對填入表單的數(shù)據(jù)進(jìn)行檢驗,一旦發(fā)現(xiàn)表單中有一個數(shù)據(jù)項不符合要求,系統(tǒng)便會彈出出錯信息,提示用戶重新填寫。對從表單得到的“密碼”、“密碼提示答案”的關(guān)鍵數(shù)據(jù),在存入數(shù)據(jù)庫的時候,系統(tǒng)還調(diào)用了MD5()函數(shù)(MD5加密程序),對數(shù)據(jù)進(jìn)行加密處理,這樣,存入數(shù)據(jù)庫中的“密碼”、“密碼提示答案”字段的值將以密文形式存放,提高了用戶信息的安全性。若條件為假,則將表單數(shù)據(jù)同加密數(shù)據(jù)寫入用戶注冊表中,完成注冊,實現(xiàn)代碼為sql=select * from user where 用戶名=39。nameamp。 sql,conn,1,3if not or not then brbrp align=centerfont color=red該用戶名已被注冊,請重新注冊其他用戶名!/font/pelse 頁面提示注冊成功后,用戶便可從聊天室首頁進(jìn)行登陸,進(jìn)入聊天室。通過提供完善的網(wǎng)上聊天系統(tǒng)服務(wù),可以達(dá)到增進(jìn)彼此之間的了解,增進(jìn)人與人之間的感情交流。系統(tǒng)進(jìn)行用戶身份驗證時,首先利用Request對象,將用戶填入的“帳號”(即用戶名)、“密碼”傳遞給預(yù)先定義的變量,再使用Select語句,將變量值與用戶信息表進(jìn)行比對sql=select * from [user] where password=39。passwordamp。 and name=39。usernameamp。其中,由于系統(tǒng)在添加用戶信息進(jìn)入數(shù)據(jù)庫表的時候,對“密碼“字段進(jìn)行了MD5加密處理,存放在數(shù)據(jù)庫中的密碼是經(jīng)過加密后的MD5值,因此,在驗證用戶密碼是否符合時,系統(tǒng)把用戶輸入的密碼計算成MD5值,再與存放在系統(tǒng)中的密碼MD5值進(jìn)行比較,在整個過程中,系統(tǒng)都不知道用戶的密碼具體時多少。在用戶登錄進(jìn)聊天主頁面的同時,系統(tǒng)將通過驗證的用戶名以及用戶信息表中對應(yīng)用戶名的“l(fā)eves”值傳遞給特別定義的session對象session(“user”)以及session(“l(fā)eves”)。經(jīng)過上述的用戶驗證和數(shù)據(jù)傳遞,系統(tǒng)跳轉(zhuǎn)到聊天頁面,此時用戶便可在聊天主頁面進(jìn)行聊天交流了。針對這種情況,系統(tǒng)設(shè)置了用戶密碼修改功能,以便系統(tǒng)中合法的注冊用戶在忘記密碼后,能重新設(shè)置新密碼來登錄系統(tǒng),以避免用戶無法登錄。驗證通過后,在該頁面中,修改密碼的用戶需要根據(jù)頁面中顯示的密碼提示問題,填入正確的密碼提示問題答案,即在注冊時用戶所填寫的密碼提示問題答案。,接著查詢用戶信息表符合用戶名等于name的記錄,將該記錄所對應(yīng)的“問題“name=Request(name)set rs = ()sql=select * from user where 用戶名=39。nameamp。用戶根據(jù)頁面顯示的密碼提示問題填入相應(yīng)的答案,單擊“確定”。這里由于數(shù)據(jù)庫中存放的“答案”項是其MD5值,所以在進(jìn)行密碼提示問題答案對比的時候,同樣是比較該數(shù)據(jù)的MD5值sql=select * from user where 用戶名=39。 name amp。 and 答案=39。 answer amp。 sql,conn,1,3if and then%script language=vbscriptalert (密碼提示答案錯誤,請返回驗證!) = javascript:()在系統(tǒng)經(jīng)過用戶名、密碼提示問題及密碼提示問題答案的雙重身份驗證后,用戶便可進(jìn)入密碼修改頁面。在進(jìn)行用戶密碼替換時,使用數(shù)據(jù)庫的update語句來修改數(shù)據(jù)庫中的密碼字段。在打開Connection對象實例后,利用