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