学习 Web Forms
  • 爱学习公众号

    关注爱学习公众号

  • 扫码手机阅读更方便

推荐阅读
  • ASP.NET AJAX 计时器控件

    本文内容 作者: Joe Stagner使用 AJAX Timer 控件,可以在一定的时间间隔内动态更新部分 ASP.NET 网页,而不必用户执行诸如单击按钮之类的操作。▶观看视频(6分钟)上一页下一页

  • “标记”控件

    此视频系列演示 ASP.NET 4 中 Web 窗体页控件的改进。

  • ASP.NET AJAX TextBoxWatermark 控件扩展程序

    本文内容 作者: Joe Stagner在此视频中,您将学习如何使用 ASP.NET AJAX 控件工具包中的 TextBoxWatermark 控件扩展程序,该工具包将新的水印属性添加到 ASP.NET 页上的所有标准 TextBox 控件中。▶观看视频(

  • 将数据库角色成员身份部署到测试环境

    本主题介绍如何在将解决方案部署到测试环境时将用户帐户添加到数据库角色中。 在将包含数据库项目的解决方案部署到过渡环境或生产环境时,通常不希望开发人员自动将用户帐户添加到数据库角色。 在大多数情况下,开发人员不知道哪些用户帐户需要添加到哪些数据库角色中,这些要求随时可能会更改。 但是,在将包含数据库项目的解决方案部署到开发或测试环境时,这种情况通常是不同的: 开发人员通常会定期重新部署解决方案,

  • Visual Web Developer 简介

    本文内容 作者: Joe StagnerMicrosoft Visual Web Developer 是 Visual Studio 的免费版本,用于开发 ASP.NET 应用程序。 此视频将演示如何获取和安装该视频,并引导你完成 IDE 及其功能的一般教程。

  • 触发另一控件的动画 (VB)

    ASP.NET AJAX 控件工具包中的动画控件不仅仅是一个控件,而是用于向控件添加动画的整个框架。 通常,启动动画时,用户与相同的控件交互。 不过,它还可以与一个控件交互,然后动画另一个控件。

  • 基于 HTTP 标头中的信息缓存 ASP.NET 页面

    本文内容 作者: Chris 像素在此视频中,Chris 像素演示了如何根据页面的 HTTP 标头中的信息,在 ASP.NET 输出缓存中保留页面。 首先,检查可能的 HTTP 标头值。 然后,将创建一个示例页,然后将 OutputCache 指令与包含值 &

  • 通过数据库使用 CascadingDropDown (VB)

    AJAX 控件工具包中的 CascadingDropDown 控件扩展了 DropDownList 控件,以便其中一个 DropDownList 中的更改加载另一个 DropDownList 中的关联值。 为了使其正常工作,必须创建一个特殊的 web 服务。

  • NoBot

    本教程介绍如何使用 NoBot 控件,该控件提供一种自动方式来阻止 bot 向网站发布。

  • 使用客户端代码更改动画 (C#)

    ASP.NET AJAX 控件工具包中的动画控件不仅仅是一个控件,而是用于向控件添加动画的整个框架。 还可以使用自定义客户端 JavaScript 代码更改动画。

成员身份

微软

ASP.NET成员资格基于表单身份验证模型从 ASP.NET 1.x 的成功为基础。 ASP.NET窗体身份验证提供了将登录表单合并到ASP.NET应用程序中以及根据数据库或其他数据存储验证用户的便捷方法。

ASP.NET成员资格基于表单身份验证模型从 ASP.NET 1.x 的成功为基础。 ASP.NET窗体身份验证提供了将登录表单合并到ASP.NET应用程序中以及根据数据库或其他数据存储验证用户的便捷方法。 窗体身份验证类的成员可以处理 Cookie 进行身份验证、检查有效登录、注销用户等。但是,在ASP.NET 1.x 应用程序中实现窗体身份验证可能需要大量代码。

ASP.NET 2.0 中的成员资格是单独使用窗体身份验证的一大进步。 (与窗体身份验证结合时,成员资格最可靠,但使用窗体身份验证不是要求。正如您很快就会看到的那样,您可以使用ASP.NET 2.0 中的ASP.NET成员资格和登录控件来实现强大的成员资格系统,而无需编写大量代码。

在 ASP.NET 2.0 中实施成员资格

成员资格通过以下四个步骤实现。 请记住,涉及许多子步骤以及可选配置,也可以实现。 这些步骤旨在说明配置成员资格的大图景。

  1. 创建成员资格数据库(如果 SQL Server 用作成员资格存储。

  2. 指定应用程序配置文件中的成员资格选项。 (默认情况下启用成员资格。

  3. 确定要使用的成员资格存储的类型。 选项有:

    • 微软 SQL 服务器(版本 7.0 或更高版本)
    • 活动目录存储
    • 自定义成员资格提供程序
  4. 配置应用程序以进行ASP.NET窗体身份验证。 再次,成员资格旨在利用窗体身份验证,但使用窗体身份验证不是一项要求。

  5. 为成员资格定义用户帐户,并根据需要配置角色。

创建成员资格数据库

如果您使用 SQL Server 7.0 或更高版本作为成员资格存储,则可以使用 aspnet_regsql 实用程序(从 Visual Studio .NET 2005 命令提示符中最容易使用)来配置数据库。 aspnet_regsql 实用程序可用作命令提示工具或通过 GUI 向导。 向导方法是配置数据库的最简单方法。 要访问向导,只需运行以下命令:

aspnet_regsql W

运行该命令后,将显示ASP.NET SQL 服务器设置向导,如下所示。

图 1

ASP.NET SQL 服务器设置向导会在向导中指定的实例中创建网站。 但是,ASP.NET将使用计算机中的连接字符串。 默认情况下,此连接字符串将指向 SQL Server 2005 实例,因此,如果您使用的是 SQL Server 2000 或 SQL Server 7.0 实例,则需要修改计算机中的连接字符串。 该连接字符串可以位于此处:

<configuration>
    <connectionStrings>
      <add name="LocalSqlServer"
         connectionString="data source=(local);
         Integrated Security=SSPI;Initial Catalog=aspnetdb;"  
         providerName="System.Data.SqlClient" />
    </connectionStrings>
</configuration>

遗憾的是,如果不修改连接字符串,ASP.NET不会给您带来描述性错误。 它会继续抱怨说,你还没有创建数据库。 在上面的案例中,我修改了连接字符串以指向我的本地 SQL Server 2000 实例。

指定配置和添加用户和角色

配置成员资格的下一步是向应用程序的 Web.config 文件添加必要的信息。 在ASP.NET 1.x 中,由于使用较低CamelCase和缺乏 Intellisense,修改 Web.config 文件有时很困难。 Visual Studio .NET 2005 使配置文件的 Intellisense 任务更加轻松,但 ASP.NET 2.0 通过提供用于编辑配置文件的 Web 界面更进一步。

您可以通过单击解决方案资源管理器工具栏上的ASP.NET配置按钮来启动 Web 界面,如下所示。 您还可以通过插入登录控件时显示的弹出窗口启动 Web 界面。

图 2

这将启动下面所示的ASP.NET网站管理工具。 ASP.NET网站管理是一个四选项卡界面,便于管理应用程序设置。 以下选项卡可用:

  • 主页
  • 安全性配置用户、角色和访问权限。
  • 应用配置应用程序设置。
  • 提供商配置和测试应用程序成员资格提供程序。

网站管理工具允许您轻松创建新用户、创建新角色以及管理用户和角色。 此功能在 Windows 界面中不可用。 Windows 界面允许您轻松定义授权设置,并添加、删除和管理不在网站管理工具中的提供程序。

要启动 Windows 界面,请打开 Internet 信息服务卡入,右键单击应用程序,然后选择"属性"。 单击ASP.NET选项卡,然后单击"编辑配置"按钮。 (应用程序必须在 2.0 ASP.NET下运行才能启用"编辑配置"按钮。 您还可以在ASP.NET对话框中配置ASP.NET版本。ASP.NET 配置设置对话框如下所示。

图 3

在"常规"选项卡上,将列出连接字符串和应用程序设置。 斜体的任何设置都在父配置文件(机器.config 或更高级别的 Web.config)中定义,而斜体化的设置来自应用程序配置文件。 如果在应用程序级别添加、删除或编辑设置,ASP.NET将在应用程序级别 Web.config 上添加、删除或修改该设置,而不是从继承该设置的配置文件中删除该设置。

"身份验证"选项卡如下所示。 这是您将配置成员资格设置的位置。 可以在此处配置窗体身份验证设置、成员资格提供程序和角色提供程序。

图 4

在应用程序中实现成员资格

实现应用程序中ASP.NET 2.0 成员资格的最简单方法是使用提供的登录控件。 此方法允许您实现ASP.NET 2.0 成员资格的基础知识,而无需编写任何代码。

以下登录控件在 2.0 ASP.NET中可用:

登录控制

登录控件为某人提供登录您的成员资格系统的界面。 它为您提供用户名和密码文本框和登录按钮。 许多其他常见功能,例如尚未注册的用户的链接、允许用户在后续访问时自动登录的复选框、密码提醒链接等。登录控件的所有功能都可通过控件的属性进行自定义。

在ASP.NET 1.x 中,开发人员在使用窗体身份验证时必须编写相当数量的代码来执行查找。 使用ASP.NET 2.0 成员资格,无需编写任何代码即可验证用户。 ASP.NET会自动为您查找用户。 (如果您使用登录控件而不使用ASP.NET成员资格,则可以使用OnAuthenticate方法验证用户。

LoginView 控件

LoginView 控件是一个模板化控件,默认情况下提供两个模板;匿名模板和登录模板。 显示的模板由用户是否登录到您的成员资格系统决定。 此控件通常用于在用户尚未登录时显示登录控件,以及用户登录时的登录状态控件和/或其他登录控件。 如果在ASP.NET应用程序中使用角色管理,则 LoginView 控件可以基于用户角色显示特定的模板。 (稍后将介绍有关ASP.NET角色管理的更多内容。

密码恢复控制

密码恢复控件允许用户接收包含其当前密码的电子邮件或重置其密码。 可以恢复明文和加密的密码并通过电子邮件发送给用户。 如果密码已哈希,则无法恢复密码。 相反,用户将需要执行密码重置。

登录状态控制

登录状态控件用于向未登录的用户显示登录指示器,向当前登录的用户显示注销指示器。 "请求.已验证"属性用于确定要显示的指示器。 登录状态控件显示的指示器可以是文本(通过登录文本注销文本属性实现)或图像(通过登录图像UrlLogoutImageUrl属性实现)。

当用户通过登录状态控件注销时,他或她将重定向到LogoutPageUrl属性指定的 URL。 如果未设置该属性,则刷新当前页面。 由于网站可能受窗体身份验证保护,因此当前页面的刷新将用户重定向到站点的登录页。

登录名控制

"登录名称"控件显示当前登录到站点的用户的用户名。

创建用户向导控件

CreateUserWizard 控件为用户提供了注册会员系统的便捷方式。 您可以通过如下所示的界面添加步骤(作为向导步骤的集合实现)。

图 5

CreateUserWizard 是一个模板化控件,派生自向导类并提供以下模板:

  • 标题模板此模板控制向导标头的外观。
  • 侧边栏模板此模板控制向导侧边栏的外观。
  • 启动导航模板此模板控制导航的外观是向导在开始步骤。
  • 步进导航模板此模板控制在导航区域的外观时不在开始或完成步骤中。
  • 完成导航模板此模板控制导航区域在完成步骤上的外观。

此外,对于添加到向导的每个步骤,ASP.NET将创建一个自定义模板,其中包含该步骤的内容模板和自定义导航模板。 有关自定义 CreateUserWizard 的完整详细信息,请参阅 2005 年VS.NET文档:

更改密码控制

更改密码控件允许用户更改其密码。 如果 DisplayUserName 属性为 true(默认情况下为 false),则用户可以在未登录时更改其密码。 如果用户登录,并且 DisplayUserName 属性为 true,则用户将能够更改未登录的其他用户的密码,前提是他们知道该用户的用户 ID。

请记住,如果您希望用户能够在无需登录的情况下更改密码,则需要确保显示更改密码控件的页面允许匿名访问。 显然,用户必须提供其旧密码才能更改其密码。

角色管理

角色管理允许您将用户分配给特定角色,然后根据该角色限制对某些文件或文件夹的访问。 角色管理还提供 API,以便您可以以编程方式确定某人的角色或确定特定角色的所有用户并做出相应响应。

角色管理不是ASP.NET成员的要求,也不是使用角色管理的要求。 然而,两者互相补充得很好,开发人员可能会将它们结合使用。

要在应用程序中启用角色管理,请对 Web.config 文件中进行以下更改:

<roleManager enabled="true" cacheRolesInCookie="true" cookieProtection="All" />

缓存RolesInCookie属性设置为 true 时,ASP.NET缓存客户端 Cookie 中的用户角色成员身份。 这允许在不调用角色提供程序的情况下进行角色查找。 使用此属性时,鼓励开发人员确保cookie 保护属性设置为"全部"。 (这是默认设置。这可确保 Cookie 数据经过加密,并有助于确保 Cookie 内容未被更改。 可以使用网站管理工具添加角色。 它允许您轻松定义角色、根据这些角色配置对网站部分的访问,并将用户分配给角色。

图 6

如上所述,只需输入角色的名称,然后单击"添加角色"即可添加新角色。 通过单击现有角色列表中的相应链接,可以管理或删除现有角色。

管理角色时,可以添加或删除用户,如下所示。

图 7

通过选中"用户处于角色"复选框,可以轻松地将用户添加到特定角色。 ASP.NET将自动使用适当的条目更新您的成员资格数据库。 您还需要为应用程序配置访问规则。 ASP.NET 1.x 开发人员熟悉通过 Web.config 文件中<的授权>元素执行此操作,该选项在 2.0 ASP.NET中仍然可用。 但是,它更易于使用网站管理工具管理访问规则,如下所示。

图 8

在这种情况下,管理文件夹将突出显示(由于该工具以浅灰色突出显示它而难以查看),并且管理员角色已被授予访问权限。 所有其他用户都被拒绝。 您可以单击头部图标来选择规则,然后使用"向上移动"和"向下移动"按钮来排列规则。 与ASP.NET<授权>元素一样,规则按它们出现的顺序进行处理。 换句话说,如果上述镜头中的规则顺序颠倒,则任何人都无法访问管理文件夹,因为ASP.NET遇到的第一个规则是拒绝所有人到该文件夹的规则。

ASP.NET 2.0 将 Web.config 文件添加到要为其指定访问规则的文件夹。 访问规则可以通过配置文件或通过网站管理工具进行编辑。 换句话说,网站管理工具只是一个界面,可以通过该界面在用户友好的环境中编辑配置文件。

在代码中使用角色

自版本 1.x 以来,用于角色管理的 API 未更改。 IsInRole方法用于确定用户是否处于特定角色。

if (User.IsInRole(Administrators)) {
    btnManageSite.Visible = true;
}

ASP.NET还会创建作为当前上下文的成员的 RoleThe 实例。 RoleThe 对象可用于获取用户所属的所有角色,如下所示:

string[] userRoles = ((RolePrincipal)User).GetRoles();

将角色组与登录视图控件一起使用

现在,您已经了解了角色管理和成员资格,让我们简要讨论一下 LoginView 控件如何在 ASP.NET 2.0 中利用此功能。 如前所述,LoginView 控件是一个模板化控件,默认情况下包含两个模板;默认情况下,该控件包含两个模板。匿名模板和登录模板。 在"登录查看任务"对话框中,是一个链接(如下所示),允许您编辑角色组。

图 9

每个 RoleGroup 对象都包含一个字符串数组,用于定义角色组应用于哪些角色。 要向"登录视图"控件添加新角色组,请单击"编辑角色组"链接。 在上面的映像中,您可以看到我为管理员添加了新的角色组。 通过从"视图"下拉列表中选择该角色组(RoleGroup{0}),我可以配置一个仅显示给管理员角色的模板。 在下图中,我添加了一个新的 RoleGroup,该角色组适用于销售角色和分发角色的成员。 这会将第二个角色组添加到 LoginView 任务对话框中的"视图"下拉下拉,而添加到该模板的任何内容都将被"销售"或"分发"角色中的任何用户看到。

图 10

重写现有成员资格提供程序

有几种方法可以扩展ASP.NET成员资格的功能。 首先,您显然可以通过继承 SqlSasas提供程序类并重写其方法来更改其现有功能。 例如,如果要在创建用户时实现自己的功能,可以创建自己的类,从 SqlSaasProvider 继承,如下所示:

public class jForumMembershipProvider : SqlMembershipProvider {
    public jForumMembershipProvider() {

    }
    public override MembershipUser CreateUser(
    string username,
    string password,
    string email,
    string passwordQuestion,
    string passwordAnswer,
    bool isApproved,
    object providerUserKey,
    out MembershipCreateStatus status) {
        // your own implementation
        return base.CreateUser(
        username,
        password,
        email,
        passwordQuestion,
        passwordAnswer,
        isApproved,
        providerUserKey,
        out status);
    }
}

另一方面,如果要创建自己的提供程序(例如,将成员资格信息存储在 Access 数据库中),则可以创建自己的提供程序。

创建您自己的成员资格提供商

要创建自己的成员资格提供程序,首先需要创建从成员资格提供程序类继承的类。 如果使用VB.NET,Visual Studio 2005 将添加需要重写的所有方法的存根。 如果使用 C#,则要添加存根。

您需要重写以下内容:

  • 应用程序名称属性
  • 更改密码功能
  • 更改密码问答功能
  • 创建用户函数
  • 删除用户功能
  • 启用密码重置属性
  • 启用密码检索属性
  • 查找用户电子邮件功能
  • 查找用户按名称函数
  • 获取所有用户功能
  • 获取用户数量联机功能
  • 获取密码功能
  • 获取用户功能
  • 获取用户名通过电子邮件功能
  • 最大无效密码尝试属性
  • 最小必需的NonAlpha字符属性
  • 最小所需密码长度属性
  • 密码尝试窗口属性
  • 密码格式属性
  • 密码强度正则表达式属性
  • 需要问答属性
  • 需要唯一电子邮件属性
  • 重置密码功能
  • 解锁用户功能
  • 更新用户功能
  • 验证用户功能

这是一个相当的列表,以C#开发人员实现。 您可能会发现在没有任何实现的情况下在VB.NET中创建类会更容易,然后使用 .NET 反射器或类似工具将代码转换为 C#。

连接字符串和其他属性应设置为初始化方法中的默认值。 (在运行时加载提供程序时,将触发初始化方法。初始化方法的第二个参数是 System.集合.专业.NameValueCollection,它是对 Web.config <>文件中与自定义提供程序关联的添加元素的引用。 该条目如下所示:

<system.web>
  <authentication mode="Forms"/>
  <membership
  defaultProvider="jForumCustomMembershipProvider" >
    <providers>
      <add name="jForumCustomMembershipProvider"
      type="jForumCustomMembershipProvider"
      requiresQuestionAndAnswer="true"
      connectionString="Provider=Microsoft.Jet.
        OLEDB.4.0;Data Source=C:\jForumCustomMembershipProvider\
        App_Data\Members.mdb;Persist Security
        Info=False"
        />
    </providers>
  </membership>
</system.web>

下面是初始化方法的示例。

public override void Initialize(string name,
    System.Collections.Specialized.NameValueCollection config) {

    if (config["requiresQuestionAndAnswer"])
        _requiresQuestionAndAnswer = true;
    _connString = config["connectionString"];
    base.Initialize(name, config);
}

为了验证用户提交登录表单时,您需要使用验证用户方法。 当用户单击登录控件中的登录按钮时,将触发此方法。 您将在此方法中放置执行用户查找的代码。

正如您所看到的,编写自己的成员资格提供程序并不困难,允许您扩展ASP.NET 2.0 的强大功能。

关于我们 免责声明 联系我们
Copyright © 2021 爱学习网 浙ICP备18049359号 网站地图 Google地图