65.9K
CodeProject 正在变化。 阅读更多。
Home

“仅限会员”部分的管理页面

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.50/5 (10投票s)

2004 年 3 月 6 日

3分钟阅读

viewsIcon

88143

downloadIcon

990

此页面帮助您使用单个子文件夹来实现“仅限会员”访问,并管理允许访问的用户。无需数据库。

Sample Image - members.gif

引言

在构建网站时,通常会要求有一个所谓的“仅限会员”专区,该专区受密码保护。

本项目中的代码有助于实现“仅限会员”访问。您可以在单个页面中轻松管理(请参见上图)允许哪些用户访问(添加、修改和删除用户)。

这是通过 ASP.NET 表单身份验证完成的,这对 Web 上的应用程序来说是最灵活的。在本项目中,用户名和密码存储在 web.config 中。因此,不需要数据库。

只要将扩展名为 aspx 的文件存储在特殊的 members 子文件夹中,它就会自动受到保护。

该项目中的用户管理在一个 ASP.NET 页面 (admin.aspx) 中完成。数据保存在 web.config 文件中。任何经过身份验证的用户都可以添加新用户、删除现有用户和重置密码。当然,无法读取现有密码,也无法在用户未检测到的情况下更改它们。

使用代码

您不需要任何编程知识即可实现此项目。只需将示例文件复制到您的网站即可。

web.configlogin.aspx 应位于根文件夹中,而 admin.aspx 应位于受保护的文件夹中。提供了两个 index.aspx 文件(一个在根目录下,一个在受保护的文件夹中)作为示例。您应该用自己的内容替换它们。

要使其在您的网站上运行,请将所有应受保护的文件(所有“仅限会员”文件)移动到 Members 文件夹中,并将它们重命名为 .aspx 扩展名(而不是 .htm.html)。当然,所有引用这些文件的链接也应更新。大多数 HTML 编辑器可以自动执行此操作。

在可下载的示例代码中,已经配置了两个用户

  1. 用户 "admin", 密码 "admin"
  2. 用户 "John", 密码 "123"

使用这些凭据之一登录,以便添加您自己的用户名和密码。 使用此页面 URL:http://www.sitename.com/members/admin.aspx (将 http://www.sitename.com/ 替换为您的主机名)。

受保护的专区目前被硬编码为“Members”。

当您想为此专区使用另一个文件夹时,您必须在 3 个地方修改项目

  1. 重命名文件夹本身(或将 admin.aspx 文件移动到另一个文件夹)。
  2. 更改 web.configlocation 元素的 path 属性的值。
  3. 修改在 admin.aspx 中使用两次的 XPath 搜索字符串。将“members”一词替换为您使用的文件夹的名称。

工作原理

身份验证过程非常简单,可以在大多数 ASP.NET 教程中找到。

首先,在 web.config 文件(放置在网站的根文件夹中)中设置 ASP.NET 表单身份验证。

用户被添加到 <credentials> 元素中,密码已加密。该程序将更新 web.config 中的一个部分,类似于此部分

<authentication mode="Forms">
   <forms name=".ASPXAUTH" loginUrl="login.aspx" 
                      protection="All" timeout="999999">
      <credentials passwordFormat="MD5">
          <user name="admin" password="21232F297A57A5A743894A0E4A801FC3" />
          <user name="John" password="202CB962AC59075B964B07152D234B70" />
      </credentials>
   </forms>
</authentication>

当然,从现在开始,您可以通过管理 Web 页面添加用户和加密密码。

添加凭据后,所有用户都可以访问所有文件夹,除了特殊的 members 文件夹。 这是使此操作发生的部分,由程序生成

<location path="members">
    <system.web>
      <authorization>
        <allow users="admin" />
        <allow users="John" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>

例如,这是在 VB.NET 中修改 web.config 中的密码的步骤

Function ModifyPasswordInConfigFile(strUsername _
                  As String,strHash As String) As Boolean

        ModifyPasswordInConfigFile = False
        If strUsername <> "" Then
            Try
                ' Open web.config file

                Dim doc As New XmlDocument()
                doc.Load(Server.MapPath("../web.config"))

                Dim strSel As String
                ' Use an XPath query to look up the

                ' user element in this configuration having 

                ' a matching "name" attribute

                strSel = "/configuration/system.web/" & _
                         "authentication/forms/credentials/user[@name='" & _
                         strUserName & "']"
                Dim node As XmlNode = doc.SelectSingleNode(strSel)
                ' Modify the element

                Dim element As XmlElement = CType(node,XmlElement)
                element.SetAttribute("password",strHash)

                ' Save the configuration

                doc.Save(Server.MapPath("../web.config"))
                ModifyPasswordInConfigFile = True
            Catch ex As Exception
                Trace.Warn(ex.ToString())
            End Try
        End If

    End Function

未来

以下是一些改进的想法

  1. 防止用户删除他们自己。
  2. 区分 2 个级别的用户:普通用户和管理员。
  3. 将保护扩展到 HTML 文件、图像、数据库等。

如果有人决定扩展此功能,或有任何评论或问题,我们很乐意听取您的意见。

关注点

该代码显示了如何通过使用 XPath 查询字符串轻松查找和修改 web.config 配置文件(或其他 XML 文件)中的元素。

历史

这是第一个版本 1.0。

© . All rights reserved.