以前搜集的一些资料---ADSI技术,使用AUO(Active User Object)取代Session对象
发表于:2007-06-30来源:作者:点击数:
标签:
使用AUO(Active User Object)来维护用户信息 如果你要是对其中的一些技术术语不明白的话, 请参考我在前面发过的有关ADSI的文章。 现在在进行网站编程的时,要保存用户信息的时候经常使用的 技术是: 1。使用Session对象来保存用户信息,这种方式很常见,它允
使用AUO(Active User Object)来维护用户信息
如果你要是对其中的一些技术术语不明白的话,
请参考我在前面发过的有关ADSI的文章。
现在在进行网站编程的时,要保存用户信息的时候经常使用的
技术是:
1。使用Session对象来保存用户信息,这种方式很常见,它允许
你在你的程序的任何一个位置添加一个Session变量,它还不对你
申明的变量进行类型检查,它的缺点很明显,一是它的随意性让
你很不方便管理你的程序结构,二是它的对数据类型的不约束性
使得你很难找到程序中的BUG,这样当你的程序出现问题的时候
你不得不在整个程序中检查所有的Session变量。
Session变量的移植性和容错性是它最头疼的地方。
2。使用隐藏的Form元素来传递变量。但是由于这种方式要求你
使用明文来传递你的变量,当对变量的
安全要求比较严格时,
又是一个很头疼的问题。
现在我们讨论一个新的用来传递变量的技术,就是AUO对象。
这种很不错的动态数据
服务器能够使用Site Server中的
Membership Server来实现。
对Session数据使用AUO
要使用AUO,你必须先定义好你的Membership Server并且指派一个网站。
一旦你设置好这些配置,我们就可以配置Membership Directory和AUO.
配置AUO
配置过程主要分下面四个步骤:
1。定义你需要的Session State属性
2。新建或则选择一个session state数据的类
3。为动态数据建立一个容器(container)
4。配置secondary AUO Provider
在
面向对象的编程技术中,属性被认为是一个类中的一个成员。
你必须为每个数据类型关联一个它的属性。
举例来说,如果想要实现一个在线购书系统,我们需要定义一个购物篮类,
它应该包括的属性有篮内的货物数目,它包含了一个数字(numeric)属性
要定义这个属性,使用Site Server的MMC,在成员目录(Membership Directory)中
增加所有的属性。
定义好属性后,现在你需要做的是给这些属性关联一个类,
一个类的实现称为一个对象,每个对象对自己的属性都可以拥有不同的数值。
如果你已经有了一个Session State类, 你要做的就是给这个类添加属性而已。
否则你需要使用Membership Directory Manager新建一个新Session State的类
在下面的例子中使用到的一个类为SessionStateClass.
现在你需要建立一个secondary AUO provider, 它是用来给主AUO provider提供辅助的
数据信息的.这可以是一个兼容ODBC的
数据库,或则是一个其它的目录服务或则是一个其它的
Membership Directory容器.在例子中,辅助的数据为Session State的Membership Directory容器信息。
这样,新建一个在Membership Directory下用来保存动态session信息的容器的
root和name为它的ou=SessionStateData. 这个secondary AUO provider将使用
SessionStateData容器来储存数据.使用MMC给SessionState建立一个secondary AUO provider
有如下属性:
ADS 路径: computername:LDAPport/o=yourDirectory/ou=SessionStateData
Schema 路径: computername:LDAPport/o=yourDirectory/ou=Admin/cn=Schema/cn=SessionStateClass
现在你已经准备好使用AUO来保存session信息的一切手续了。
虽然看上去很混乱(说真的,我翻译到这里是比较的混乱), 你刚才所做的在Membership Directory的scope中
新建和实现一个对象:定义一个类(class), 该类有用来描述和说明一个session state的属性(或则说是成员)
而在实现的过程中,每个用户(就是客户端的浏览器)将得到这个类的一个实现(或则说是对象).
好了,现在让我们来看看AUO到底是怎么工作的把。
在ASP中使用下面的语句调用一个AUO provider
Set objUser = Server.CreateObject("Membership.UserObjects")
你能够通过下面的语句调用获得这个对象的任何静态属性。
Response.Write "Your login: " + objUser.cn
要设置动态信息,你需要先确保该对象确实存在。
因为它是一个动态对象(dynamic object),所以你不能够把它当成一个
自动(automatically)对象。
If Not IsArray(objUser("SessionState").objectClass) Then
objUser("SessionState").objectClass =
Array("SessionState", "dynamicObject")
End If
接下来,设置这个AUO对象的TTL(生存期)数值. 当该时间到后,这个对象将终止和消失。
这需要调用SetInfo方法。
objUser("SessionState").entryTTL = 900 @# 默认单位为秒
objUser("SessionState").SetInfo
最后,我们来设置该对象的数值(讲简单点,就是终于可以来实现Session的功能了)
就是给属性numItems赋值。注意,在schema中这个属性必须要存在,而且数据类型必须要匹配。
objUser( "SessionState" ).numItems = 3
objUser( "SessionState" ).SetInfo
如果使用一个不存在的属性或者使用了错误的数据类型,你都将得到出错信息的。
访问AUO Session State
要访问你刚才赋值的属性,只要指定了用户对象,和secondary AUO的name以及属性名即可。
Response.Write objUser("SessionState").numItems
注意的是,如果你设置的TTL到期后,你使用以上语句将得不到任何返回值。
比较一下Session和AUO Objects的不同之处
你也许已经注意到,在你使用AUO的属性前你必须先要定义这些属性,
这是一个相对与Session对象而言一个很大的优势,这将迫使个人
开发者在设计变量,
对外接口上发更多的时间(也就是说再也不能够象使用Session一样,随便使用任何名字了)。
并且把变量的声明都集中在一起,这对于多个开发者同时开发一个项目而言是个很大的进步。
同时它也提供了更多的处理数据的可能。你能够使用ADSI来访问保存Session State的组(group)
并且它能够很方便的传递所有的用户信息,这包括:人们在你的在线购物系统中买了什么东西,
,他们在你的在线购物系统中不满意什么,在什么时间他们买了什么东西等等。
原文转自:http://www.ltesting.net