仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1293|回复: 9
打印 上一主题 下一主题

[学习教程] ASP.NET网站制作之ASP.NET 2.0 Membership

[复制链接]
小魔女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:45:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
java的设计机制:首先产生一个中间码,第二部编译为本地(机器)码。这个机制有很大的缺点。asp.net择要:asp.net2.0的Membership组件供应了一组十分复杂易用的接供词开辟者举行用户办理,用户考证。本文将它对它的完成道理举行复杂的剖析,先容怎样准确的利用,和怎样对它进扩大。
1、MembershipProvider笼统类
在良多情形下,在利用Membership的时分我们其实不会间接利用到这个类。在MembershipProvider类界说的都是一些笼统办法和笼统属性,就是这些办法和属性组成了Membership接口的基础标准,并且在.NET框架外部利用Membership的功效都是经由过程这个范例挪用的。承继类经由过程完成这些接口来供应不必情况下的用户办理功效,而且对Membership框架自己并没有影响,上面来看看MembershipProvider本相界说:

publicabstractclassMembershipProvider:ProviderBase
...{
//Events
publiceventMembershipValidatePasswordEventHandlerValidatingPassword;
//Methods
protectedMembershipProvider();
publicabstractboolChangePassword(stringusername,stringoldPassword,stringnewPassword);
publicabstractboolChangePasswordQuestionAndAnswer(stringusername,stringpassword,stringnewPasswordQuestion,stringnewPasswordAnswer);
publicabstractMembershipUserCreateUser(stringusername,stringpassword,stringemail,stringpasswordQuestion,stringpasswordAnswer,boolisApproved,objectproviderUserKey,outMembershipCreateStatusstatus);
protectedvirtualbyte[]DecryptPassword(byte[]encodedPassword);
publicabstractboolDeleteUser(stringusername,booldeleteAllRelatedData);
internalstringEncodePassword(stringpass,intpasswordFormat,stringsalt);
protectedvirtualbyte[]EncryptPassword(byte[]password);
publicabstractMembershipUserCollectionFindUsersByEmail(stringemailToMatch,intpageIndex,intpageSize,outinttotalRecords);
publicabstractMembershipUserCollectionFindUsersByName(stringusernameToMatch,intpageIndex,intpageSize,outinttotalRecords);
internalstringGenerateSalt();
publicabstractMembershipUserCollectionGetAllUsers(intpageIndex,intpageSize,outinttotalRecords);
publicabstractintGetNumberOfUsersOnline();
publicabstractstringGetPassword(stringusername,stringanswer);
publicabstractMembershipUserGetUser(objectproviderUserKey,booluserIsOnline);
publicabstractMembershipUserGetUser(stringusername,booluserIsOnline);
internalMembershipUserGetUser(stringusername,booluserIsOnline,boolthrowOnError);
publicabstractstringGetUserNameByEmail(stringemail);
protectedvirtualvoidOnValidatingPassword(ValidatePasswordEventArgse);
publicabstractstringResetPassword(stringusername,stringanswer);
internalstringUnEncodePassword(stringpass,intpasswordFormat);
publicabstractboolUnlockUser(stringuserName);
publicabstractvoidUpdateUser(MembershipUseruser);
publicabstractboolValidateUser(stringusername,stringpassword);
//Properties
publicabstractstringApplicationName...{get;set;}
publicabstractboolEnablePasswordReset...{get;}
publicabstractboolEnablePasswordRetrieval...{get;}
publicabstractintMaxInvalidPasswordAttempts...{get;}
publicabstractintMinRequiredNonAlphanumericCharacters...{get;}
publicabstractintMinRequiredPasswordLength...{get;}
publicabstractintPasswordAttemptWindow...{get;}
publicabstractMembershipPasswordFormatPasswordFormat...{get;}
publicabstractstringPasswordStrengthRegularExpression...{get;}
publicabstractboolRequiresQuestionAndAnswer...{get;}
publicabstractboolRequiresUniqueEmail...{get;}
//Fields
privateMembershipValidatePasswordEventHandler_EventHandler;
privateconstintSALT_SIZE_IN_BYTES=0x10;
}

个中润色符为internal是几个办法是暗码的帮助办法,用于加密,解密和考证暗码。但这边的计划仿佛有一些成绩,将这些办法界说为internal局限仿佛有点不当,将这些办法界说在基类中,就是为了可以被复用,可是从效果下去看,不是如许的,由于internal的成员只同意在本程序集内被利用(一般情形下,不包含反射等别的办法),这就是说我们本人扩大的MembershipProvider是没法利用到这些办法的。并且从今朝使用局限来看,今朝这些办法也只要在SqlMembershipProvider中被利用到,以是我以为应当将这些办法润色符修正为protected。
2、Membership静态类
下面提到过,一样平常情形下我们都不会间接往利用到MembershipProvider笼统,由于这触及到怎样往实例化真实的Membership服务类的成绩,触及到设置和实例化工具的成绩一样平常都是对照辣手的成绩,对初学者来讲,想要把握也不是那末简单。那在.NET框架中就是经由过程Membership(StaticClass)这个静态类来屏障失落这一层的庞大干系。Membership(StaticClass)除利用者屏障读设置文件,初始工具等一些基础事情外,另有一个主要的感化就是重载一切的MembershipProvider以是有API,乃至为了让用户加倍便利的利用,将这些办法重载为静态办法,而且供应了MembershipProvider基础API基本上加倍丰厚的重载完成供利用者挪用。这就间接撑持了不论是在UI层,仍是别的的各个工程,只必要援用System.Web.Security定名空间,就能够不必体贴任何细节的享用到Membership给我们供应的各类便当。上面来看看Membership(StaticClass)的原型界说:(使用LutzRoder’s.NETReflector能够检察它的一切完成。)
publicstaticclassMembership
...{
//Events
publicstaticeventMembershipValidatePasswordEventHandlerValidatingPassword;
//Methods
staticMembership();
publicstaticMembershipUserCreateUser(stringusername,stringpassword);
publicstaticMembershipUserCreateUser(stringusername,stringpassword,stringemail);
publicstaticMembershipUserCreateUser(stringusername,stringpassword,stringemail,stringpasswordQuestion,stringpasswordAnswer,boolisApproved,outMembershipCreateStatusstatus);
publicstaticMembershipUserCreateUser(stringusername,stringpassword,stringemail,stringpasswordQuestion,stringpasswordAnswer,boolisApproved,objectproviderUserKey,outMembershipCreateStatusstatus);
publicstaticboolDeleteUser(stringusername);
publicstaticboolDeleteUser(stringusername,booldeleteAllRelatedData);
publicstaticMembershipUserCollectionFindUsersByEmail(stringemailToMatch);
publicstaticMembershipUserCollectionFindUsersByEmail(stringemailToMatch,intpageIndex,intpageSize,outinttotalRecords);
publicstaticMembershipUserCollectionFindUsersByName(stringusernameToMatch);
publicstaticMembershipUserCollectionFindUsersByName(stringusernameToMatch,intpageIndex,intpageSize,outinttotalRecords);
publicstaticstringGeneratePassword(intlength,intnumberOfNonAlphanumericCharacters);
publicstaticMembershipUserCollectionGetAllUsers();
publicstaticMembershipUserCollectionGetAllUsers(intpageIndex,intpageSize,outinttotalRecords);
privatestaticstringGetCurrentUserName();
publicstaticintGetNumberOfUsersOnline();
publicstaticMembershipUserGetUser();
publicstaticMembershipUserGetUser(booluserIsOnline);
publicstaticMembershipUserGetUser(objectproviderUserKey);
publicstaticMembershipUserGetUser(stringusername);
publicstaticMembershipUserGetUser(objectproviderUserKey,booluserIsOnline);
publicstaticMembershipUserGetUser(stringusername,booluserIsOnline);
publicstaticstringGetUserNameByEmail(stringemailToMatch);
privatestaticvoidInitialize();
publicstaticvoidUpdateUser(MembershipUseruser);
publicstaticboolValidateUser(stringusername,stringpassword);
//Properties
publicstaticstringApplicationName...{get;set;}
publicstaticboolEnablePasswordReset...{get;}
publicstaticboolEnablePasswordRetrieval...{get;}
publicstaticstringHashAlgorithmType...{get;}
internalstaticboolIsHashAlgorithmFromMembershipConfig...{get;}
publicstaticintMaxInvalidPasswordAttempts...{get;}
publicstaticintMinRequiredNonAlphanumericCharacters...{get;}
publicstaticintMinRequiredPasswordLength...{get;}
publicstaticintPasswordAttemptWindow...{get;}
publicstaticstringPasswordStrengthRegularExpression...{get;}
publicstaticMembershipProviderProvider...{get;}
publicstaticMembershipProviderCollectionProviders...{get;}
publicstaticboolRequiresQuestionAndAnswer...{get;}
publicstaticintUserIsOnlineTimeWindow...{get;}
//Fields
privatestaticchar[]punctuations;
privatestaticbools_HashAlgorithmFromConfig;
privatestaticstrings_HashAlgorithmType;
privatestaticbools_Initialized;
privatestaticExceptions_InitializeException;
privatestaticobjects_lock;
privatestaticMembershipProviders_Provider;
privatestaticMembershipProviderCollections_Providers;
privatestaticints_UserIsOnlineTimeWindow;
}
说到这里,就不能不多罗嗦两句。在看Membership(StaticClass)完成代码的过程当中,能够发明,每个MembersipAPI重载都最初都是挪用属性Provider的办法,这个属性的范例就是MembershipProvider范例,只要看到这里,你大概才会了解MembershipProvider的主要感化了吧。另有一个Providers属性,这个属性就是取得web.config中设置的一切的Membership供应服务类。它们都是静态属性,可是它们怎样往实例化的呢?就是经由过程挪用Membership.Initialize()这个办法,在每次挪用这两个属性的时分,城市挪用这个办法往判别是不是已初始化了Membership供应服务类了,假如没有则往挪用设置服务类,读取设置内容,从而举行初始化。到此你大概也就不难了解了,为何我们利用那末复杂了!
3、SqlMembershipProvider先容和利用设置
OK,经由过程下面的先容应当基础能够懂得Membership的全体布局了吧?(怎样还没有,多是你没有翻开LutzRoder’s.NETReflector往剖析它的完成代码,大概是对笼统类的感化还没弄分明)。不论怎样,我们终极的目标就是要学会怎样往利用。
在这之前,我先要先容一下,在.NET框架中供应的两个MembershipProvider完成类:ActiveDirectoryMembershipProvider和SqlMembershipProvider(怎样晓得这两个类的?在MembershipProvider的DerivedTypes就能够看到一切的承继类了。)前者是供应基础举动目次下的用户办理(我也没有理论过),后者就是我们最常常利用到的基于SqlServer的用户办理完成。
到了先容怎样利用了,实在园子里已有了这方面的文章((翻译)怎样在ASP.NET2.0中利用Membership),我也未几费口舌了。但这边要告知人人一个最间接的进修和参考利用的举措。在体系盘找到并翻开machine.config,找到AspNetSqlMembershipProvider节点,看到没有,实在这个就是一个最基础的Membership设置了,只不外是还少了一个defaultProvider属性的指定,指定了这个属性后,你再利用Login控件,举行用户登录考证就无需利用任何代码了。不信你能够尝尝。(关于Forms考证,就不在这里多做先容,能够参考相干材料。关于SqlMembershipProvider的更多属性的先容能够参看MSDN)。
4、怎样自界说MembershipProvider,现有别的的MembershipProvider资本
那末,我们怎样往自界说一个MembershipProvider呢?实在假如你已懂得了Membership的布局后我信任对你来讲已不是一件很难的事了,可是思索到要完全的写一个MembershipProvider仍是有必定的事情量和难度的。关于我们来讲,更多的中央多是对现有的Provider举行扩大,如SqlMembershipProvider。那实在这长短常复杂的,我们只必要承继自SqlMembershipProvider,(悄然告知你,在Initialize办法config参数中保留的就是Provider对应设置节的属性名和值)然后扩大和重写所需的办法就能够了。利用的时分,在Provider设置节中,将type的值改成你的类名就OK了。
最初,在市情上已有很多多少分歧情况的MembershipProvider了,如mysql,Oracle等。这里给出Mysql的完成:http://www.codeproject.com/aspnet/mysqlmembershipprovider.asp,更多分歧的完成,信任你从google上找到更多的匡助。
好了,说多了,说了这么多但愿能对任劳任怨看完本篇blog的您有所匡助,感谢^_*
2003年中微软发布最新版本的ASP.netWebMatrix,对于我们喜欢用Asp.net来编程的朋友实在是个好消息,我也实实在在的将Asp.net更深入的研究了一下,以方便我以后更好的运用它,同时我也讲讲使用它的感受。
只想知道 该用户已被删除
沙发
发表于 2015-1-17 20:32:08 | 只看该作者
是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。
不帅 该用户已被删除
板凳
发表于 2015-1-21 07:48:18 | 只看该作者
那么,ASP.Net有哪些改进呢?
兰色精灵 该用户已被删除
地板
发表于 2015-1-30 12:12:37 | 只看该作者
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
透明 该用户已被删除
5#
发表于 2015-2-6 11:21:23 | 只看该作者
但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。
灵魂腐蚀 该用户已被删除
6#
发表于 2015-2-16 01:15:26 | 只看该作者
在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。
再现理想 该用户已被删除
7#
发表于 2015-3-4 21:19:44 | 只看该作者
目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.
深爱那片海 该用户已被删除
8#
发表于 2015-3-11 21:06:03 | 只看该作者
由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。
柔情似水 该用户已被删除
9#
发表于 2015-3-19 13:25:35 | 只看该作者
大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。
简单生活 该用户已被删除
10#
发表于 2015-3-28 04:26:35 | 只看该作者
现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-27 20:15

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表