2

我有 ASP.Net 2.0 网站,其中 SQL Server 作为数据库,C# 2005 作为编程语言。该网站几乎已完成,所有链接都可以正常工作。但我想阻止普通用户打开几页。当任何用户单击这些特定链接时,将打开另一个页面,其中包含一个 ASP 登录控件。用户必须提供有效的用户名和密码才能显示指向限制性页面的链接。但作为一个新手,我不知道如何利用 ASP 登录控件的全部功能。因为,如果用户知道受限页面的确切 url,那么他/她可以绕过登录控制,通过在地址栏中输入 url 直接访问这些页面。我想防止这种情况。如果用户直接在地址栏中键入 url,我希望页面本身应该检查,

我如何实现这个功能?

谢谢你。

拉利特·库马尔·巴里克

4

5 回答 5

8

您需要查看web 配置的位置部分。

在该部分中,您可以将访问权限定义到页面级别,因此用户是否知道受保护页面的 URL 无关紧要,ASP.NET 不会让他们进入。

所以你会添加类似的东西:

<location path="SecuredPage.aspx">
  <system.web>
     <authorization>
        <deny users="?"/>
     </authorization>
  </system.web>
</location>

"deny users="?"" 位表示“拒绝所有匿名用户”。

如果您正在使用某些角色,您还可以将其设置为仅允许某些角色。

可以在此处找到有关授权部分的更多信息:

授权元素

于 2009-03-13T14:29:52.120 回答
2

这是 ASP.Net 会员服务的食物。看看这篇文章以及4GuysFromRolla上的精彩系列

成员资格允许您存储登录控件使用的用户/密码信息。再加上授权配置,您将能够直接将对特定页面的访问范围缩小到特定用户或角色。

于 2009-03-13T14:52:01.927 回答
1

您将需要一种方法来管理每个用户的登录会话。以下是一些可以帮助您的教程:

http://www.codeproject.com/KB/session/NoCookieSessionLogin.aspx

http://www.dotnetspider.com/resources/5597-Handling-Session-for-Login-Logout.aspx

于 2009-03-13T14:29:49.030 回答
0

您应该在必须控制权限的页面上的每个事件中验证用户的登录状态Page_Load(),或者简单地将身份验证代码放入将包含在所有其他文件中的 CS 文件中。

根据您选择的身份验证架构(只需使用会话变量,或使用 cookie 创建会话 id),您必须相应地调整您的代码。

最简单的方法是通过会话对象管理登录。当用户使用正确的凭据正确登录时,您可以设置Session["logged_in"] = true. 在您要保护的页面的每个Page_Load()事件上,您都需要进行以下检查。

在 Page_Load() 函数的开头添加此代码:

  if (Session["logged_in"] != null && (bool)Session["logged_in"] == true){
    Response.Write("I'm logged in!");
  }else{
    Response.Write("I'm not logged in.");
  }

请记住,这对于简单的 Intranet 应用程序来说是可以的,但是如果您想进入更安全的登录架构,请阅读有关该主题的更多信息,因为仅依赖会话变量是不安全的,因为会话可能被劫持。

于 2009-03-13T14:33:31.970 回答
0

我会为用户制作一个角色表。每个登录的人都会获得“正常”角色。您通过其凭据指定的特殊用途将获得分配角色以访问您网站的页面或部分。某些用户(例如您自己)将获得管理员角色,自动允许他们访问所有内容。

触发一个名为 CheckIsInRoles('Admin', 'Normal', 'WhateverRoleYouChoose') 的函数,它返回一个布尔值。如果为真,则加载页面;如果没有,不要。

如果角色不正确,最好不要显示链接。

这有一个额外的好处,即每个人都登录一次,然后访问他们需要的所有页面,而不必每次都登录。

于 2009-03-16T12:49:06.447 回答