登录控件的学习实践.docx_第1页
登录控件的学习实践.docx_第2页
登录控件的学习实践.docx_第3页
登录控件的学习实践.docx_第4页
登录控件的学习实践.docx_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

有了微软VS工具中的Login控件后,个人就完全没有必要再去编写有关登录环节的代码了,因为在通常情况下,你所编写的程序,几乎不可能比微软的一流人才小组所编写、测评后发表的程序更好,因此,当你在工程中需要编写登录内容时的步骤,就是深入学习和正确运用微软的登录控件。一、了解Login控件的主要功能网站上数据的安全,是项目的使用方与开发方都极度关心的问题,这也是微软特地推出登录控件原因,Login控件是一个复合控件,它提供对网站上的用户进行身份验证所需的、所有常见的UI元素。所有网站的登录方案都需要以下三个元素:1、用于标识用户的惟一用户名。2、用于验证用户标识的密码。3、用于将登录信息发送到服务器的登录按钮。此外,Login 控件还应该提供以下支持附加功能的可选UI 元素:1、密码提示链接。2、用于在两次会话之间保留登录信息的“记住我”复选框。3、为那些在登录时遇到问题的用户提供的帮助链接。4、将用户重定向到注册页的“注册新用户”链接。5、出现在登录窗体上的说明文本。6、在用户未填写用户名或密码字段而直接单击登录按钮时,出现的自定义错误文本。7、登录失败时出现的自定义错误文本。8、登录成功时发生的自定义操作。9、在用户已登录到站点时隐藏登录控件的方法尽管微软做出了不少努力,但道高一尺魔高一丈。为应付不断出现的安全问题,如今的登录环节,又出现了字符验证识别码、和图像识别验证码,U盘防盗狗等新技术,这里无法讨论。二、Login控件的主要属性 表1 Login控件最常用的属性及说明属性描述CreateUserIconUrl获取显示在新用户的注册页链接旁边的图像的位置CreateUserText获取或设置新用户注册页的链接文本CreateUserUrl获取或设置新用户注册页的 URLDestinationPageUrl获取或设置在登录尝试成功时向用户显示的页面的 URLFailureAction获取或设置当登录尝试失败时发生的操作FailureText获取或设置当登录尝试失败时显示的文本HelpPageText获取或设置登录帮助页链接的文本HelpPageUrl获取或设置登录帮助页的URLLoginButtonText获取或设置Login控件的登录按钮的文本LoginButtonType获取或设置在呈现Login按钮时使用的按钮类型MembershipProvider获取或设置控件使用的成员资格数据提供程序的名称Orientatio获取或设置一个值,该值指定页面上Login控件的元素的位置PasswordLabelText获取或设置 Password文本框的标签文本PasswordRecoveryText获取或设置密码恢复页链接的文本PasswordRecoveryUrl获取或设置密码恢复页的 URLPasswordRequiredErrorMessage获取或设置当密码字段为空时在 ValidationSummary控件中显示的错误信息RememberMeText获取或设置“记住我”复选框的标签文本TextLayout指定 Login 控件的每个标签相对于其关联文本框的位置TitleText获取或设置Login控件的标题UserName获取用户输入的用户名UserNameLabelText获取或设置UserName文本框的标签文本UserNameRequiredErrorMessage获取或设置当用户名字段为空时在ValidationSummary 控件中显示的错误信息ValidatorTextStyle获取对 Style 属性集合的引用,这些属性定义与Login控件使用的验证程序关联的错误信息的外观VisibleWhenLoggedIn获取或设置一个值,该值指示在验证用户身份后是否显示 Login 控件下面对比较重要的属性进行详细介绍。(1)CreateUserText属性此属性获取或设置新用户注册页的链接文本。语法:publicvirtualstringCreateUserTextget;set;属性值:新用户注册页的链接文本。默认为空值 Empty。说明:CreateUserText 属性包含站点注册页的链接文本。在CreateUserUrl属性中指定注册页的URL。如果CreateUserUrl为空,则向用户显示CreateUserText属性中的文本,但不以链接的形式显示。如果CreateUserText属性为空,则不向用户提供注册页链接(2)CreateUserUrl属性此属性用来设置新用户注册页的URL,它包含网站新用户注册页的URL。语法:publicvirtualstringCreateUserUrlget;set;属性值:新用户注册页的 URL。默认为 Empty。说明:CreateUserText属性包含链接使用的文本。如果CreateUserText属性为空,则不向用户提供注册页链接。(3)DestinationPageUrl属性此属性获取或设置在登录尝试成功时向用户显示的页面的URL。语法:publicvirtualstringDestinationPageUrlget;set;属性值:登录尝试成功时用户被重定向到的页面的 URL。默认为Empty。例如:登录成功要转向“Default2.aspx”页面。代码如下:Login1.DestinationPageUrl=/Default2.aspx;(4)FailureAction属性此属性获取或设置当登录尝试失败时发生的操作。语法:publicvirtualLoginFailureActionFailureActionget;set;属性值:LoginFailureAction枚举值之一。默认为Refresh。LoginFailureAction枚举值及说明如表5所示。 表5 LoginFailureAction枚举值及说明枚举值说明RedirectToLoginPage将用户重定向到站点的配置文件(Machine.config 和 Web.config)中所定义的登录页Refresh刷新当前页,以便 Login控件可以显示错误消息(5)HelpPageUrl属性此属性获取或设置登录帮助页的URL。语法:publicvirtualstringHelpPageUrlget;set;属性值:登录帮助页的URL。默认为Empty。 说明:HelpPageUrl 属性包含网站的登录帮助页的URL。HelpPageText属性包含用于链接的文本。如果HelpPageUrl为空,则向用户显示HelpPageText属性中的文本,但不以链接的形式显示。如果HelpPageText属性为空,则不向用户提供登录帮助页链接。(6)HelpPageText属性此属性获取或设置登录帮助页链接的文本语法:publicvirtualstringHelpPageTextget;set;属性值:登录帮助页链接的文本。默认为Empty。(7)LoginButtonType属性此属性获取或设置在呈现Login按钮时使用的按钮类型。语法:publicvirtualButtonTypeLoginButtonTypeget;set;属性值:ButtonType枚举值之一。默认为Button。ButtonType枚举值及说明如表6所示。 表6 ButtonType 枚举值及说明枚举值说明Button命令按钮Image显示图像的按钮Link超链接样式的按钮(8)PasswordRecoveryUrl属性此属性获取或设置密码恢复页的URL。语法:publicvirtualstringPasswordRecoveryTextget;set;属性值:密码恢复页链接的文本。默认为Empty。(9)PasswordRequiredErrorMessage属性此属性获取或设置当用户名字段为空时在ValidationSummary控件中显示的错误信息语法:publicvirtualstringPasswordRequiredErrorMessageget;set;属性值:当密码字段为空时,在ValidationSummary控件中显示的错误信息。默认值是“密码”。(10)RememberMeText 属性此属性获取或设置“记住我”复选框的标签文本。语法:publicvirtualstringRememberMeTextget;set;属性值:“记住我”复选框的标签文本。默认为下“次记住我”。(11)UserNameRequiredErrorMessag属性获取或设置当用户名字段为空时,在ValidationSummary控件中显示的错误信息。语法:publicvirtualstringUserNameRequiredErrorMessageget;set;属性值:当用户名字段为空时在ValidationSummary 控件中显示的错误信息。默认为“用户名”。(12)VisibleWhenLoggedIn属性此属性获取或设置一个值,该值指示在验证用户身份后是否显示Login控件。语法:publicvirtualboolVisibleWhenLoggedInget;set;属性值:如果在验证用户身份后隐藏Login控件,则为false;否则为true。默认为true。本例使用Login控件,实现成员资格用户登录网站验证用户名和密码。示例运行,输入用户名“mr”,密码“mr.soft”登录网站。Login 控件设计代码如下。 三、触发事件 表7Login控件的常用事件及说明事件描述Authenticate验证用户的身份后出现LoggedIn在用户登录到网站并进行身份验证后出现LoggingIn在用户未进行身份验证而提交登录信息时出现LoginError当检测到登录错误时出现下面仅对Authenticate事件进行详细介绍。Authenticate事件验证用户的身份后出现。当用户使用Login控件登录到网站时,引发Authenticate事件。自定义身份验证方案可以使用Authenticate事件对用户进行身份验证。定义身份验证方案应该将Authenticated属性设置为 true,以指示已验证用户的身份。语法:publiceventAuthenticateEventHandlerAuthenticate 说明:在用户提交登录信息后,Login控件先引发LoggingIn事件,然后引发Authenticate事件,最后引发LoggedIn事件。本例使用Login 控件的Authenticate事件,实现自定义用户登录网站。示例运行,输入用户名“System”,密码“111”登录网站。代码如下。protectedvoidLogin1_Authenticate1(objectsender,AuthenticateEventArgse) System.Data.SqlClient.SqlConnectioncon=newSystem.Data.SqlClient.SqlConnection(server=ZHYZHY;uid=sa;pwd=;database=aspnetdb); con.Open(); stringstrSql=select*fromtb_01whereuserid=+Login1.UserName.ToString()+andusername=+Login1.Password+; System.Data.SqlClient.SqlCommandcom=newSystem.Data.SqlClient.SqlCommand(strSql,con); System.Data.SqlClient.SqlDataReaderdr=com.ExecuteReader(); if(dr.Read() e.Authenticated=true;/通过验证 else e.Authenticated=false; dr.Close(); con.Close(); 四、典型实例本例实现登录控件的综合应用,使用Login控件实现成员资格用户登录网站。运行实例“Login.aspx”页,输入用户名“soAsp_net”,密码“111”登录网站。主要代码如下。ASP.NET 2.0 Login控件(上)作者:Keith Brown相关技术:安全、ASP.NET 2.0难度: 导读在安全已经成为首要问题的今天,ASP.NET 2.0给了开发人员极大的信心,从新引入的服务器段安全控件、角色定义、密码恢复及其基于成员和角色的编程,ASP.NET 2.0让您的系统更加安全可靠。 新的安全性功能是ASP.NET 2.0中的一项重大改进。这些功能包括管理用户帐户数据库的成员身份服务、哈希密码、管理用户角色成员身份的角色管理器,以及可以更容易实现窗体身份验证的五个新的服务器端控件。ASP.NET 2.0还提供了提供程序模型(Provider Model),使您能够完全控制Membership和Role服务以及无cookie窗体身份验证的实现。您还可以非常轻松地对用户帐户和角色进行简单的、基于Web的本地和远程管理,并且可以获得对其他非安全性相关设置的增强控制。重推窗体身份验证 窗体身份验证是ASP.NET 1.0中使用最广泛的功能之一,因为它封装了许多特定实现所缺少的最佳实践。例如,您知道有多少窗体身份验证实现可以保护用来存放客户端凭证的cookie的完整性吗?窗体身份验证不仅将用户名写入该cookie中,而且还添加了一个消息身份验证代码(一个根据该cookie形成的哈希值和只有Web服务器知道的秘密值)。这可以防止恶意的客户端通过提高权限或通过修改其cookie中的名称来查看其他用户的数据。 如果留意.NET Web开发人员推出的各种新闻组和列表服务器,您将了解到人们正在一遍又一遍地实现相同的东西:用户数据库、cookie中缓存的角色、捕获用户名和密码的控件、管理用户和角色的工具。ASP.NET小组已经提供了针对几乎所有这些问题的内置解决方案。在研究ASP.NET 2.0的alpha版本时,我发现在以可管理的方式构建使用窗体身份验证的Web站点时,所使用的代码量急剧减少。入门 如果您有ASP.NET 2.0(可用于MSDN),那么在演练某些可以执行的实验时,您就会发现开始使用这些新功能是多么地简单!普通订阅者可以下载。 要开始下载,您需要一个指向空目录的虚拟目录。您必须确保ASP.NET辅助进程具有读取、执行和写入该目录的权限。如果您运行的是Windows 2000或Windows XP,则需要为ASP.NET本地帐户赋予这些权限;而对于Windows Server 2003,您需要为网络服务帐户赋予这些权限。 我将使用窗体身份验证,所以我需要通过web.config文件来启用它。如果我现在向您展示如何使用ASP.NET 1.1,那么您需要打开一个文本编辑器并开始手动键入XML。但是在ASP.NET 2.0中,我最喜欢的功能之一是交互式配置文件编辑器,它直接构建于IIS管理控制台,您可以在虚拟目录的属性表的“ASP.NET”选项卡中找到它。单击“Edit configuration”按钮以打开编辑器。图1 配置编辑器 图1显示了这个新编辑器。您会看到我选择了窗体身份验证而不是默认选项:Windows身份验证。在您自己的虚拟目录中进行同样的操作。当使用配置工具时,将Web应用程序的默认语言设置为C#,因为它将替您省去一些后面需要进行的输入。“Page Language Default”设置是Application选项卡上的第一个下拉选项。在应用这些更改之后,您将在目录中找到web.config文件并带有所有设置。 您需要向Membership服务注册一些用户以便开始,因此编写的第一页是允许添加用户的页。在该测试版中提供了一个服务器控件,通过该控件,您可以使用下面三行代码来实现该页: Name: Email address: Password: Retype password: void onSubmit(object sender, EventArgs args) if (pwd1.Text.Equals(pwd2.Text) MembershipCreateStatus status; MembershipUser newUser = Membership.CreateUser(name.Text, pwd1.Text, email.Text, out status); msg.Text = status.ToString(); else msg.Text = Passwords dont match, try again.;图2 adduser.aspx 不过,由于我使用的版本是alpha,所以我必须直接使用Membership类来手工为这个特殊的窗体编写代码。而现在,只需使用图2 中所示的ASPX页就可以了,我将在本文稍后讨论Membership类。图3显示当您将浏览器指向该页时所看到的内容。继续进行试验,现在添加一些用户和密码。成功后,您的工作应该更加轻松!图3 成员页 完成用户添加之后,请仔细查看虚拟目录。您应该看到一个名为“DATA”新的子目录,其中包含了一个Microsoft Access数据库。这是Membership和Role服务默认存储其数据的地方,但是稍后我会向您展示如何覆盖默认存储机制以使用SQL Server,或您自己的自定义数据储备库。现在,您可以使用ASP.NET 2.0中的安全控件了。服务器端安全控件 图4 列出了ASP.NET 2.0中的五个新安全控件。从LoginStatus控件开始探索是个好主意。首先创建一个包含该控件的新ASPX页。为了简单起见,调用新页面default.aspx: 控件描述LoginStatus提供一个登录或者注销的按钮,主要依赖于用户的当前状态Login提供一个表单用于收集和校验依赖于用户数据库的登录凭证LoginName显示一个已经登录的用户名LoginView显示特定的内容,依赖于用户是否登录,而用户是否是某角色的成员为可选PasswordRecovery提供一个找回忘记的密码需要的清单图4 ASP.NET 2.0新的安全控件 将浏览器指向该页面,您应该看到一个Login链接。如果您在浏览器中查看结果页面的源代码,您将看到这个超级链接指向一个名为login.aspx的页面,但您还没有编写它。这又是一个用三行代码实现的Web页,因此我们继续进行试验,现在就创建它: 如果您曾经手工实现过窗体身份验证,您就会赞赏这三行代码。过去,执行数据库查找的等同实现需要两倍数量的代码。 现在回到您的浏览器,并单击Login链接,它将您带到如图5所示的登录页。尝试用一个无效用户名或密码登录,可以发现,系统会弹出一条适当的默认错误消息。这条消息不会给攻击者太多的信息。而一个没有经验的开发人员也决不会无意中发送回一条消息给该用户,告诉他获得了正确的用户名,请尝试猜测另一个密码!图5 登录页 继续进行并键入一个有效的用户名和密码,这是您先前通过adduser.aspx页输入的用户名和密码,然后您应该被重定向回default.aspx页。由于您没有为登录控件提供任何自定义操作,所以默认情况下它只通过窗体身份验证来让您登录,这意味着您的浏览器现在有了一个存放用户名的加密cookie。 既然您已经重定向回default.aspx页面,您看到有什么不同吗?登录状态控件现在应该显示Logout而不是Login。因为窗体身份验证cookie是与请求一起发送的,所以FormsAuthenticationModule创建了一个经过身份验证的用户主体,并且将其与该请求的上下文相关联。登录状态控件会注意到这种情况,并且改变成允许您注销。尝试注销并重新登录来查看这项工作。 现在,让我们再添加一些代码到default.aspx页面:User Name: User Type: 刷新这个页面,会看到您用来登录的用户名。请注意,表示用户的基本对象是GenericPrincipal类型,这是FormsAuthenticationModule表示用户的方式。一旦您启动Role Manager,就会注意到这种类型变化,因为当启用时,新的RoleManagerModule就取代了由FormsAuthentication使用它自己的类型生成的用户。 现在,让我们添加一个LoginView控件到default.aspx页面,以显示可以根据用户的登录而改变的内容。使用这个控件最简单的方法是提供两个内容块:一个用于匿名请求(在用户登录之前),另一个用于身份验证请求(在用户登录之后): If you see this, youve not yet logged in! Welcome to my website, ! 当您登录或注销时,您应该看到LoginView控件中的文本发生了改变,正如我们所预料的一样。这是一个非常简单的想法,但是它确实让您的代码变得更清晰。定义角色 我已经制作了一个简单的页面,它允许您使用Role Manager将用户添加到角色,但是在您能使用它之前,还需要为应用程序启用Role Manager。回到配置工具,并找到“Authentication”选项卡。选中标有“Role management enabled”的复选框,然后应用这个改变。 Role: User: void onSubmit(object sender, EventArgs args) if (!Roles.RoleExists(role.Text) Roles.CreateRole(role.Text); msg.Text = Created a new ro

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论