阻止访问者打开某些页面

时间:2009-03-13 14:20:18

标签: asp.net forms-authentication verification sessionid

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

如何实现此功能?

谢谢。

Lalit Kumar Barik

5 个答案:

答案 0 :(得分:8)

您需要查看网络配置的location部分。

在该部分中,您可以将页面级别定义为访问权限,因此,如果用户知道安全页面的URL,则无关紧要,ASP.NET不会让他们进入。

所以你要添加如下内容:

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

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

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

有关授权部分的更多信息,请访问:

  

authorization Element

答案 1 :(得分:2)

这是ASP.Net会员服务的食物。在4GuysFromRolla上查看this articlethe great series

成员资格允许您存储登录控件使用的用户/密码信息。与授权配置相结合,您将能够直接缩小对特定用户或角色的访问权限。

答案 2 :(得分:1)

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

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

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

答案 3 :(得分: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应用程序是可以的,但是如果您想要进入更安全的登录体系结构,请阅读有关该主题的更多信息,因为仅仅在会话变量上进行重新处理是不安全的,因为会话可能被劫持

答案 4 :(得分:0)

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

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

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

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