(搬运).net起步 (用配置文件属性维护网站用户信息 1)

来源:互联网 发布:网络出版书籍 编辑:程序博客网 时间:2024/05/17 05:12

知识点介绍:

ASP.NET 除了提供了 Membership 身份验证机制之外,还提供了一种用户个性化设置的机制,称为 Profile 。 Profile 可以和 Membership 结合起来,存储用户自定义数据。在 Profile 中可以存储各种类型的数据,包括最基本的 int 、 double 类型,也可以是复杂的用户自定义类型,比如购物车、用户信息等。
Profile 和 Session 类似,都是用来存储用户自定义数据,但是二者也有本质的区别:
1.Session 只能够短暂的保留用户数据(默认为 20 分钟),但是 Profile 可以持久的保存,因为二者的存储介质不同, Session 默认是存放在内存当中的,而 Profile 是存放在数据库中。虽然说Session 可以通过配置使之保存在状态服务器或者数据库当中,但还是有很大的区别。
2.Profile 是强类型的,而 Session 仅仅是一个项集合而已。并且 VS 对 Profile 提供了智能感知的支持,使用方便。

知识点应用:

下面来看看如何使用 Profile 。

首先第一步和 Membership 一样,也是添加数据库支持,如果之前按照前面说的添加过了,在这里直接开始第二步,就是配置。

第二步:将下面代码复制入 web.config 的 system.web 节点之下:

    <profile enabled="true" defaultProvider="SqlProvider">      <providers>        <add name="SqlProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ConnectionString" appliction="TestMembership"/>      </providers>      <properties>        <add name="test" type="String" allowAnonymous="true"/>      </properties>    </profile>

这个配置大多数的属性和 Membership 中的含义是一样的,我们只是说明一下特有的属性。在这个配置当中有 Providers 和 Properties 节点,其中 Providers 节点之前在配置 Membership 中了解过了,现在介绍一下 properties 节点:

在这个节点下, add 标签的作用就是添加一个 “ 属性 ” , name 属性就是 “ 属性 ” 的名字, type 就是 “ 属性 ” 的类型,这个类型可以是 int 、 double 等简单数据类型,也可以是购物车类等用户自定义数据类型,不过需要注意的是, 如果为 “ 类 ” 类型,则该类必须可以序列化,就是在类的上面添加[Serializable] 特性。 allowAnonymous 这个属性指定用户在匿名状态下,是否可以设置该属性。

例:

[Serializable]public Class MyObject {   public int n1 = 0;   public int n2 = 0;   public String str = null; }

注意:需要引入命名空间:

using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary; //二进制格式化IFormatter formatter = new BinaryFormatter();需要

序列化是指将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。 
C#类的序列化



好了,配置完毕,我们就可以在页面上使用 Profile 了,建立一个页面,在页面上添加一个 button ,双击在 button 的 click 事件当中写下如下代码:

Profile.test = "123123";
这个 Profile.test 就是我们在前面 properties 节点下添加的 “ 属性 ” ,类型为 string 类型。浏览这个页面,点击 button ,看下效果,出错了!错误提示如下:

配置文件属性 “test” 允许匿名用户存储数据。这要求启用 AnonymousIdentification 功能。

这是因为 ASP.NET 默认情况下不允许匿名用户,很简单,我们简单的设置一下,允许使用匿名用户即可,还是在 web.config 中 system.web 节点下添加一段配置:

<anonymousIdentification enabled="true"/>
ok ,现在再来浏览下页面,点击 button 试试?没有任何反应?这就对了!我们只是赋了值但是并没有将这个属性值显示出来啊。
我们再次新建一个页面,在这个页面的 page_load 事件当中添加一句:

Response.write(Profile.test);
完事,我们先浏览第一个页面,点击 button ,执行了 Profile.test=“123123” ;这段代码,然后关闭浏览器,再打开第二个页面,可以看到,我们在第一个页面中存入的 “123123” 这个字符串,在第二个页面显示出来了。

原理很简单:当我们打开了 anonymousIdentification 功能后, ASP.NET 会给每个用户分配一个 AnonymousID ,保存在 Cookie 中。如图:

这是 Cookie 中存储的内容, .ASPXANONYMOUS 这是默认的 Cookie 名称,可以在web.config 中的 anonymousIdentification 节中 CookieName 属性中设置自己的 Cookie 名字。


这是在调试状态下,得到的 AnonymousID


这是数据库 aspnet_Users 表中存储的内容,注意 UserName 和 IsAnonymous 字段。


这是数据库中表 aspnet_Profile 中的内容,可以看到,我们 test 属性中的内容为: 123123 ,PropertyNames 字段中 test:S:0:6 的含义大家应该猜出来了吧 !test 是属性名, S 代表的 String类型, 0:6 代表 PropertyValuesString 字段中的从第 0 位到第 6 位的内容。

这样,当该用户使用这台电脑再次访问网站,网站便可以根据这个 Cookie 中的 AnonymousID来识别出用户的身份,再通过 AnonymousID 从 aspnet_Profile 表中,便可以取出用户上一次保存的数据。

ok ,以上便是匿名状态下的 Profile 。当然,如果我们不需要匿名,而要求用户登录后才能保存数据的话,那么就没上面这么麻烦了,直接设置 allowAnonymous="false" 即可,不需要去添加anonymousIdentification 配置。这样,该属性只能在用户登录状态下访问,未登录去访问该属性就会报错。

阅读全文
0 0
原创粉丝点击