这两天一直在看membership,之前对它只是泛泛了解一点,只是使用登陆控件能登陆而已....而且是使用的SQL2000因为.NET2.0默认的是使用SQL 2005 Express(地球人都知道!!)所以之前也花了不少时间去看教程....哎~这就是自学的悲哀啊....也许只要老师的1分钟......
好了,说正题:Membership!扩展分三个方面:
1.对 Membership重要属性的了解
2:使用ACCESS来存储 Membership,因为用Sql的移植性很差!!!
3 扩展 Membership表!!
第一:
Membership的重要属性:
1 MinRequiredNonAlphanumericCharacters-----处次使用.NET中的"管理网站"时在新建用户时,密码都要求输入一个特殊字符!!这是默认的MinRequiredNonAlphanumericCharacters属性...第一次不知道的人会相当的郁闷的...其实只要在web.config里设置为0就不用特殊字符了! (具体下面有例子)
2:MinRequiredPasswordLength属性是指密码最小长度,默认为7...(比较合理....呵呵)
3:HashAlgorithmType属性:在创建完用户之后,我们想看看我们的表内容...可我第一次看楞住了..什么东东? 怎么都看不懂...其实是密码等敏感信息都被加密了,默认的是用哈希(记得数据结构里有的...),也就是HashAlgorithmType属性的默认值,还有两个: Clear(不加密)和MD5(现在比较流行吧..)
4:MaxInvalidPasswordAttempts 属性与PasswordAttemptWindow属性一
起使用以防止不明来源反复尝试来猜测成员资格用户的密码或密码提示问题答案。也就是免得别人挂个JS狂刷服务器..
Membership的主要方法
* CreateUser已重载。将新用户添加到数据存储区。
* DeleteUser已重载。从数据库中删除一个用户。
* FindUsersByEmail已重载。获取一个成员资格用户的集合,其中的
电子邮件地址包含要匹配的指定电子邮件地址。
*FindUsersByName已重载。获取一个成员资格用户的集合,其中的
用户名包含要匹配的指定用户名。
* GeneratePassword生成指定长度的随机密码。
* GetAllUsers已重载。获取数据库中用户的集合。
* GetNumberOfUsersOnline获取当前访问应用程序的用户数。
*GetUser已重载。从数据源获取成员资格用户的信息。
* GetUserNameByEmail获取一个用户名,其中该用户的电子邮件地
址与指定的电子邮件地址匹配。
* UpdateUser用指定用户的信息更新数据库。
* ValidateUser验证提供的用户名和密码是有效
这里要说的是Membership中密码找回功能!!! 也就是EnablePasswordRetrieval 属性,基本上是不能用的,这是Microsoft设计时逻辑上的问题...具体这里一下说不清楚..
下面是一个Web.config文件中实例:上面说的属性就在<membership>里设置.....
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<connectionStrings>
<add name="AccessFileName" connectionString="~/App_Data/ASPNetDB.mdb" providerName="System.Data.OleDb"/>
</connectionStrings>
<system.web>
<authentication mode="Forms">
<forms loginUrl="login.aspx" defaultUrl="Default.aspx"/>
</authentication>
<membership defaultProvider="AccessMembershipProvider">
<providers>
<clear/>
<add name="AccessMembershipProvider"
type="Samples.AccessProviders.AccessMembershipProvider, SampleAccessProviders"
connectionStringName="AccessFileName"
enablePasswordRetrieval="true"
enablePasswordReset="true"
requiresUniqueEmail="true"
requiresQuestionAndAnswer="true"
minRequiredPasswordLength="8"
minRequiredNonalphanumericCharacters="2"
applicationName="SampleSite"
hashAlgorithmType="Clear"
passwordFormat="Clear"/>
</providers>
</membership>
<roleManager enabled="true" defaultProvider="AccessRoleProvider" cacheRolesInCookie="true" cookieName=".ASPXROLES" cookieTimeout="30" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All">
<providers>
<add name="AccessRoleProvider"
type="Samples.AccessProviders.AccessRoleProvider, SampleAccessProviders"
connectionStringName="AccessFileName"
applicationName="SampleSite"/>
</providers>
</roleManager>
<anonymousIdentification enabled="true" cookieName=".ASPXANONYMOUS" cookieTimeout="100000" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="None" domain=""/>
<compilation debug="true"/>
<authorization>
<allow roles="admin"/>
<allow users="aa"/>
<!--<deny users="*"/>-->
</authorization>
</system.web>
</configuration>
我直到今天才能全看懂!!!呵呵.....
第二个:
也是我今天花了大半天来看的东东....哎~ 就是用ACCESS来装Membership...
为什么我们要用ACCESS呢? 原因很多吧......1用SQL 2005的数据库最小10M...而ACCESS只有600K左右...差距太大了!!!! 2 用ACCESS网站到哪都能运行,而SQL 运行的机器上 至少也要装个SQL 2000或2005吧....等等
下面说说实现方法, 因为微软提供的Provider Toolkit 工具,使我们简单了许多!! 在
要经过三个步骤:1、用VS2005编译下载回来的压缩包里的7个*.CS文件,保存编译后的*.dll文件..最好保存文件名为SampleAccessProviders.dll,因为web.config里是这样用的....然后在你的网站工程里新键Bin目录,把刚才的文件放进去!! 2 把数据库 AspNetbd.mdb保存在APP_Data目录下....3.最后配置web.config文件刚才已经说了的...4. 最后可以放心使用我们的登陆控件了....哈哈,大功告成!!!!
第三: 扩展membership表....这点我还在测试....方法有两个
*使用Profile扩展用户信息列
*使用扩展表扩展用户信息列
下面我说一点web.config细节
1 <authentication mode="Forms">
<forms loginUrl="login.aspx" defaultUrl="Default.aspx"/>
</authentication>
这个结点的作用就是, 登陆后转到defaultUrl="Default.aspx"页面,没登陆就转到loginUrl="login.aspx" 当然这也要看 <authorization>
<allow roles="admin"/>
<allow users="aa"/>
<!--<deny users="*"/>-->
</authorization>是是怎么设置了的....这是设置页面授权...也就是如果设置了<deny users="*"/>就如果不登陆,除了login.aspx页面其他的都不能访问了, 都会自动转到login.aspx里去了
感想:
可是看了一,两天的教程和MSDN才弄明白这些...感觉真累呀..还有些细节不懂? 怎么我设置用Hashed加密时就报错呢? 还有SHA!和Hashed 有什么区别? 怎么设置某一个要登陆后浏览? 在上面的方法设置了全部啊!!! 等等...怎么一说还有这多不懂呀....好郁闷...等下继续看....呵呵
最后感谢Kaneboy's Blog的资料...有的东西是找他们COPY的..呵呵