使用AUO(Active User Object)來維護(hù)用戶信息 如果你要是對(duì)其中的一些技術(shù)術(shù)語不明白的話, 請(qǐng)參考我在前面發(fā)過的有關(guān)ADSI的文章。 現(xiàn)在在進(jìn)行網(wǎng)站編程的時(shí),要保存用戶信息的時(shí)候經(jīng)常使用的 技術(shù)是: 1。使用Session對(duì)象來保存用戶信息,這種方式很常見,它允許 你在你的程序的任何一個(gè)位置添加一個(gè)Session變量,它還不對(duì)你 申明的變量進(jìn)行類型檢查,它的缺點(diǎn)很明顯,一是它的隨意性讓 你很不方便管理你的程序結(jié)構(gòu),二是它的對(duì)數(shù)據(jù)類型的不約束性 使得你很難找到程序中的BUG,這樣當(dāng)你的程序出現(xiàn)問題的時(shí)候 你不得不在整個(gè)程序中檢查所有的Session變量。 Session變量的移植性和容錯(cuò)性是它最頭疼的地方。 2。使用隱藏的Form元素來傳遞變量。但是由于這種方式要求你 使用明文來傳遞你的變量,當(dāng)對(duì)變量的安全要求比較嚴(yán)格時(shí), 又是一個(gè)很頭疼的問題。 現(xiàn)在我們討論一個(gè)新的用來傳遞變量的技術(shù),就是AUO對(duì)象。 這種很不錯(cuò)的動(dòng)態(tài)數(shù)據(jù)服務(wù)器能夠使用Site Server中的 Membership Server來實(shí)現(xiàn)。
對(duì)Session數(shù)據(jù)使用AUO 要使用AUO,你必須先定義好你的Membership Server并且指派一個(gè)網(wǎng)站。 一旦你設(shè)置好這些配置,我們就可以配置Membership Directory和AUO.
配置AUO 配置過程主要分下面四個(gè)步驟: 1。定義你需要的Session State屬性 2。新建或則選擇一個(gè)session state數(shù)據(jù)的類 3。為動(dòng)態(tài)數(shù)據(jù)建立一個(gè)容器(container) 4。配置secondary AUO Provider
在面向?qū)ο蟮木幊碳夹g(shù)中,屬性被認(rèn)為是一個(gè)類中的一個(gè)成員。 你必須為每個(gè)數(shù)據(jù)類型關(guān)聯(lián)一個(gè)它的屬性。 舉例來說,如果想要實(shí)現(xiàn)一個(gè)在線購(gòu)書系統(tǒng),我們需要定義一個(gè)購(gòu)物籃類, 它應(yīng)該包括的屬性有籃內(nèi)的貨物數(shù)目,它包含了一個(gè)數(shù)字(numeric)屬性 要定義這個(gè)屬性,使用Site Server的MMC,在成員目錄(Membership Directory)中 增加所有的屬性。 定義好屬性后,現(xiàn)在你需要做的是給這些屬性關(guān)聯(lián)一個(gè)類, 一個(gè)類的實(shí)現(xiàn)稱為一個(gè)對(duì)象,每個(gè)對(duì)象對(duì)自己的屬性都可以擁有不同的數(shù)值。 如果你已經(jīng)有了一個(gè)Session State類, 你要做的就是給這個(gè)類添加屬性而已。 否則你需要使用Membership Directory Manager新建一個(gè)新Session State的類 在下面的例子中使用到的一個(gè)類為SessionStateClass. 現(xiàn)在你需要建立一個(gè)secondary AUO provider, 它是用來給主AUO provider提供輔助的 數(shù)據(jù)信息的.這可以是一個(gè)兼容ODBC的數(shù)據(jù)庫(kù),或則是一個(gè)其它的目錄服務(wù)或則是一個(gè)其它的 Membership Directory容器.在例子中,輔助的數(shù)據(jù)為Session State的Membership Directory容器信息。
這樣,新建一個(gè)在Membership Directory下用來保存動(dòng)態(tài)session信息的容器的 root和name為它的ou=SessionStateData. 這個(gè)secondary AUO provider將使用 SessionStateData容器來儲(chǔ)存數(shù)據(jù).使用MMC給SessionState建立一個(gè)secondary AUO provider 有如下屬性: ADS 路徑: computername:LDAPport/o=yourDirectory/ou=SessionStateData Schema 路徑: computername:LDAPport/o=yourDirectory/ou=Admin/cn=Schema/cn=SessionStateClass 現(xiàn)在你已經(jīng)準(zhǔn)備好使用AUO來保存session信息的一切手續(xù)了。 雖然看上去很混亂(說真的,我翻譯到這里是比較的混亂), 你剛才所做的在Membership Directory的scope中 新建和實(shí)現(xiàn)一個(gè)對(duì)象:定義一個(gè)類(class), 該類有用來描述和說明一個(gè)session state的屬性(或則說是成員) 而在實(shí)現(xiàn)的過程中,每個(gè)用戶(就是客戶端的瀏覽器)將得到這個(gè)類的一個(gè)實(shí)現(xiàn)(或則說是對(duì)象). 好了,現(xiàn)在讓我們來看看AUO到底是怎么工作的把。 在ASP中使用下面的語句調(diào)用一個(gè)AUO provider Set objUser = Server.CreateObject("Membership.UserObjects") 你能夠通過下面的語句調(diào)用獲得這個(gè)對(duì)象的任何靜態(tài)屬性。 Response.Write "Your login: " + objUser.cn 要設(shè)置動(dòng)態(tài)信息,你需要先確保該對(duì)象確實(shí)存在。 因?yàn)樗且粋(gè)動(dòng)態(tài)對(duì)象(dynamic object),所以你不能夠把它當(dāng)成一個(gè) 自動(dòng)(automatically)對(duì)象。 If Not IsArray(objUser("SessionState").objectClass) Then objUser("SessionState").objectClass = Array("SessionState", "dynamicObject") End If 接下來,設(shè)置這個(gè)AUO對(duì)象的TTL(生存期)數(shù)值. 當(dāng)該時(shí)間到后,這個(gè)對(duì)象將終止和消失。 這需要調(diào)用SetInfo方法。 objUser("SessionState").entryTTL = 900' 默認(rèn)單位為秒 objUser("SessionState").SetInfo 最后,我們來設(shè)置該對(duì)象的數(shù)值(講簡(jiǎn)單點(diǎn),就是終于可以來實(shí)現(xiàn)Session的功能了) 就是給屬性numItems賦值。注意,在schema中這個(gè)屬性必須要存在,而且數(shù)據(jù)類型必須要匹配。 objUser( "SessionState" ).numItems = 3 objUser( "SessionState" ).SetInfo 如果使用一個(gè)不存在的屬性或者使用了錯(cuò)誤的數(shù)據(jù)類型,你都將得到出錯(cuò)信息的。
訪問AUO Session State 要訪問你剛才賦值的屬性,只要指定了用戶對(duì)象,和secondary AUO的name以及屬性名即可。 Response.Write objUser("SessionState").numItems 注意的是,如果你設(shè)置的TTL到期后,你使用以上語句將得不到任何返回值。
比較一下Session和AUO Objects的不同之處 你也許已經(jīng)注意到,在你使用AUO的屬性前你必須先要定義這些屬性, 這是一個(gè)相對(duì)與Session對(duì)象而言一個(gè)很大的優(yōu)勢(shì),這將迫使個(gè)人開發(fā)者在設(shè)計(jì)變量, 對(duì)外接口上發(fā)更多的時(shí)間(也就是說再也不能夠象使用Session一樣,隨便使用任何名字了)。 并且把變量的聲明都集中在一起,這對(duì)于多個(gè)開發(fā)者同時(shí)開發(fā)一個(gè)項(xiàng)目而言是個(gè)很大的進(jìn)步。 同時(shí)它也提供了更多的處理數(shù)據(jù)的可能。你能夠使用ADSI來訪問保存Session State的組(group) 并且它能夠很方便的傳遞所有的用戶信息,這包括:人們?cè)谀愕脑诰購(gòu)物系統(tǒng)中買了什么東西, ,他們?cè)谀愕脑诰購(gòu)物系統(tǒng)中不滿意什么,在什么時(shí)間他們買了什么東西等等。
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!