首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

17.3  匿名个性化

ASP.NET 2.0中的一个新特性是允许匿名的终端用户利用它提供的个性化功能。如果站点需要某种形式的注册,这就是很重要的。此时,终端用户在第一次使用某些基本服务之前,并不总是注册对重要应用程序的访问。例如,许多电子商务站点允许匿名终端用户在注册之前,在该站点上购物,使用站点的购物车。

17.3.1  支持终端用户的匿名身份

匿名个性化功能默认为禁用,因为它会消耗流行站点上的数据库资源。因此,允许匿名个性化的第一步是使用web.config文件中的一个设置启用这个功能。还需要根据属性在web.config文件中的具体设置进行一些修改,以确定是否允许对应用程序进行匿名个性化。

如程序清单17-9所示,可以启用匿名身份识别功能,让个性化引擎利用<anonymousIdentification>元素识别未知的终端用户。

程序清单17-9  允许进行匿名身份识别

<configuration>

  <system.web>

       <anonymousIdentification enabled="True" />

  </system.web>

</configuration>

为了对可能访问应用程序的终端用户启用匿名身份,应在web.config文件的<system.web>节点中添加<anonymousIdentification>元素。然后在<anonymousIdentification>元素中使用Enabled属性,把它的值设置为True。该值默认设置为False。

启用匿名身份功能后,ASP.NET会给每个访问应用程序的匿名用户使用一个唯一的标识符。这个标识符会随每个请求一起发送,但在终端用户由ASP.NET验证身份后,该标识符就会删除。

对于匿名用户,其信息在终端用户的机器上默认存储为一个cookie。其他信息(给匿名用户提供的个性化属性)存储在服务器的特定数据库中。

为了演示匿名身份功能,请关闭示例应用程序的Windows Authentication,而使用Form Authentication,如程序清单17-10所示:

程序清单17-10  关闭Windows Authentication,使用Form Authentication

<configuration>

  <system.web>

       <anonymousIdentification enabled="True"/>

       <authentication mode="Form" />

  </system.web>

</configuration>

然后运行程序清单17-2中的页面,就会看到如程序清单17-11中所示的标题。

程序清单17-11  在HTTP标题中设置匿名Cookie

HTTP/1.1 200 OK

Server: ASP.NET Development Server/8.0.0.0

Date: Sat, 11 Feb 2006 19:23:37 GMT

X-AspNet-Version: 2.0.50727

Set-Cookie:

.ASPXANONYMOUS=UH5CftJlxgEkAAAAZTJkN2I3YjUtZDhkOS00NDE2LWFlYjEtOTVjMjVm

zMXZWRmHoBUAs9A055rziDrMQ1Hu_fC_hM1; expires=Sat, 22-Apr-2006 06:03:36 GMT;

path=/; HttpOnly

Cache-Control: private

Content-Type: text/html; charset=utf-8

Content-Length: 1419

Connection: Close

在这个HTTP标题中,cookie(即.ASPXANONYMOUS)被设置为一个散列值,供ASP.NET个性化系统进行检索。

1.    给匿名身份修改Cookie的名称

cookie默认使用的名称是.ASPXANONYMOUS。在web.config文件的<anonymous Identification>元素中,使用cookieName属性可以修改这个cookie的名称,如程序清单17-12所示。

程序清单17-12  修改cookie的名称

<configuration>

  <system.web>

       <anonymousIdentification

           enabled="True"

           cookieName=".ASPXEvjenWebApplication" />

  </system.web>

</configuration>

2. 修改存储cookie的时间长度

另外,存储在终端用户机器上的cookie默认存储100,000分钟(大约70天)。如果要修改这个值,可以在<anonymousIdentification>元素中使用cookieTimeout属性修改,如程序清单17-13所示。

程序清单17-13  修改存储cookie的时间长度

<configuration>

  <system.web>

       <anonymousIdentification

           enabled="True"

           cookieTimeout="1440" />

  </system.web>

</configuration>

在这个例子中,cookieTimeout值改为了1440,即1440分钟(一天)。如果不想把终端用户的身份保留太长时间,这是存储购物车的理想时间。

3. 改变标识符的存储方式

匿名标识符使用cookie存储,还可以改变这种方式。cookie是获得身份的首选方式,但不使用cookie也可以获得身份。其他方式有使用URI或设备配置文件。程序清单17-14是使用URI保存标识符的一个例子。

程序清单17-14  指定cookie的存储方式

<configuration>

  <system.web>

       <anonymousIdentification

           enabled="True"

           cookieless="UseUri" />

  </system.web>

</configuration>

除了UseUri之外,其他选项包括UseCookies、AutoDetect和UseDeviceProfile。下面介绍这些选项:

●       UseCookies: 这是默认设置。如果没有设置值,ASP.NET就假定使用这个值。UseCookies表示cookie放在终端用户的机器上,用于标识身份。

●       UseUri: 这个值表示cookie不存储在终端用户的机器上,而是把唯一标识符放在页面的URL上。这种方法与ASP.NET 1.0/1.1中使用无cookie的会话相同。如果开发人员想避免把cookie放在终端用户的机器上,这个选项很适合,但它会创建古怪的URL,在终端用户给页面加上书签,以便以后浏览时,这可能会成为一个问题。

●       AutoDetect: 使用这个值,会让ASP.NET引擎确定是给匿名身份使用cookie还是URL方法。每个用户都要进行一次确定,它执行起来比其他两个选项糟糕一些。ASP.NET必须在确定使用哪个方法前检查终端用户。如果必须让终端用户关闭cookie(目前很少见),最好使用AutoDetect代替UseUri。

●       UseDeviceProfile: 为发出请求的设备或浏览器配置标识符。

4. 查看存储的匿名标识符

为了使匿名标识符保持唯一,可使用全局唯一的GUID。现在还可以获取这个唯一标识符。要获取GUID,就要使用AnonymousId属性改进Request对象。AnonymousId属性返回String类型的值,它可以用在代码中,如下所示:

Label1.Text = Request.AnonymousID

17.3.2  使用匿名身份事件

在创建匿名用户的过程中,注意可以使用两个重要的事件来管理该过程:

●       AnonymousIDentification_OnCreate

●       AnonymousIDentification_OnRemove

使用AnonymousIDentification_OnCreate事件,可以进行终端用户的身份识别。例如,如果不想使用GUID唯一地标识终端用户,就可以在这个事件中改变标识值。

为此,使用AnonymousIDentificationEventArgs类型的事件委托创建该事件,如程序清单17-15所示。

程序清单17-15  改变匿名用户的唯一标识符

VB

Public Sub AnonymousIDentification_OnCreate(ByVal sender As Object, _

   ByVal e As AnonymousIDentificationEventArgs)

        e.AnonymousId = "Bubbles " & DateTime.Now()

End Sub

C#

public void AnonymousIDentification_OnCreate(object sender,

   AnonymousIDentificationEventArgs e)

{

       e.AnonymousId = "Bubbles " + DateTime.Now();

}

AnonymousIDentificationEventArgs事件委托有一个AnonymousID属性,它的值用于唯一地标识匿名用户。现在不使用GUID唯一地标识匿名用户:

d13fafec-244a-4d21-9137-b213236ebedb

在AnonymousIDentification_OnCreate事件中把AnonymousID属性改为:

Bubbles 2/10/2006 2:07:33 PM

AnonymousIDentification_OnRemove事件也使用AnonymousIDentificationEventArgs类型的事件委托,在把匿名用户变成注册用户之前使用该事件委托。注意,此时仍可以访问Request对象的AnonymousID属性。

17.3.3  个性化属性的匿名选项

如果试图使匿名功能发挥作用,就可能会得到如图17-4所示的错误。

图  17-4

有了处理匿名用户的功能后,还必须给浏览页面的匿名用户指定支持哪些个性化属性。为此,在web.config文件的<properties>段中,给<add>元素添加allowAnonymous属性,如程序清单17-16所示。

程序清单17-16  为个性化属性启用匿名功能

<properties>

   <add name="FirstName" type="System.String" />

   <add name="LastName" type="System.String" />

   <add name="LastVisited" type="System.DateTime" allowAnonymous="true" />

   <add name="Age" type="System.Integer" />

   <add name="Member" type="System.Boolean" />

</properties>

在这个例子中,设置了LastVisited属性,再把allowAnonymous属性设置为True,以支持匿名用户。由于这是处理匿名用户的唯一属性,所以其他已定义的属性都不为这类用户存储信息。

17.3.4  有关匿名用户配置信息的警告

考虑到前面介绍的有关匿名用户的所有内容,应对采用什么方法非常谨慎。存储匿名用户的配置信息会大量占用所用的数据库。例如在下面的例子中,使用了Microsoft的SQL Server Express Edition,存储了一个已验证用户的配置信息和一个匿名用户的信息。这会把这两个用户的信息存放在aspnet_Profile和aspnet_Users表中。

aspnet_Users表中的两个用户如图17-5所示。

在这个图中,匿名用户用灰框突出显示。这个用户有一个很古怪的名字,显示在Request.AnonymousID的前面。两个用户的另一个区别是表中的IsAnonymous列。匿名用户的这一列设置为true,而已验证的用户设置为false。数据库可能会很快填充大量的匿名用户信息,所以应考虑一下需要为这类用户存储什么信息。

图  17-5

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论