(搬运).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 配置。这样,该属性只能在用户登录状态下访问,未登录去访问该属性就会报错。
- (搬运).net起步 (用配置文件属性维护网站用户信息 1)
- (搬运).net起步 (用配置文件属性维护网站用户信息 2)
- (搬运).net起步 (用配置文件属性维护网站用户信息 3)
- 用配置文件属性维护网站用户信息
- (搬运).net起步 (自定义 ASP.NET CreateUserWizard 控件1)
- (搬运).net起步 (自定义 PasswordRecovery 控件)
- (搬运).net起步 (MemberShip 的配置)
- (搬运).net起步 (MemberShip 初步实例)
- (搬运).net起步 (初步创建具有成员资格和用户登录功能的网站)
- (搬运).net起步 (自定义 ASP.NET CreateUserWizard 控件2)
- (搬运).net起步 (通过 Membership 进行权限控制)
- (搬运).net起步 (身份验证机制 membership 项目演练)
- (搬运).net起步 (使用 ASP.NET Login 控件的高级功能)
- (搬运).net起步 (构建 T ASP.NET 三层架构实例演示)
- (搬运).net起步(通过Membership和MembershipUser创建用户管理系统)
- (搬运).net起步 (对 Login 控件添加图文验证码)
- asp.net 维护网站
- 公司维护网站时常用的sql语句.net
- [类欧几里得算法] Codechef JUNE17 #ES Euler Sum
- 项目测试日报模板整理
- ET流程规范
- 服务端&客户端QA:协作&对接沟通流程及优化
- JSP(一)
- (搬运).net起步 (用配置文件属性维护网站用户信息 1)
- H5接入app准入报告
- 客户端Bug优先级定义
- 客户端case优先级定义
- NA端测试规范
- bug规范初稿
- DNA序列
- JavaScript常用的基础语法和技巧
- 深度强化学习——A3C