Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 阻止访问者打开某些页面_Asp.net_Forms Authentication_Verification_Sessionid - Fatal编程技术网

Asp.net 阻止访问者打开某些页面

Asp.net 阻止访问者打开某些页面,asp.net,forms-authentication,verification,sessionid,Asp.net,Forms Authentication,Verification,Sessionid,我有一个ASP.NET2.0网站,SQL Server作为数据库,C#2005作为编程语言。该网站几乎是完整的,所有的链接工作良好。但是我想阻止普通用户打开几个页面。当任何用户单击这些特定链接时,将打开另一个包含ASP登录控件的页面。用户必须提供有效的用户ID和密码才能显示指向限制性页面的链接。但是作为一个新手,我不知道如何利用ASP登录控件的全部功能。因为,如果用户知道受限制页面的确切url,那么他/她可以绕过登录控件,通过在地址栏中键入url直接访问这些页面。我想阻止这一切。如果用户直接在地

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

如何实现此功能

多谢各位


Lalit Kumar Barik

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


您需要查看web配置的部分

在该部分中,您可以定义页面级别的访问权限,因此,如果用户知道受保护页面的URL,则无所谓,ASP.NET不会让他们进入

因此,您可以添加如下内容:

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


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

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

最简单的方法是通过会话对象管理登录。当用户使用正确的凭据正确登录时,您可以将
会话[“logged_in”]=true
。对于要保护的页面的每个
Page\u 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应用程序来说是可以的,但是如果你想进入更安全的登录体系结构,请阅读更多关于这个主题的内容,因为仅仅依赖会话变量是不安全的,因为会话可能会被劫持。

这是ASP.Net会员服务的食物。看看4GuysFromRolla,也看看4GuysFromRolla


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

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

启动一个名为CheckIsInRoles(“Admin”、“Normal”、“WhateverRoleYouChoose”)的函数,该函数返回一个布尔值。如果为true,则加载页面;如果没有,就不要

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


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

在执行该行时,如果(SESSION['logged\u in']!=null&&SESSION['logged\u in']==true)我得到以下错误:运算符“==”不能应用于“object”和“bool”类型的操作数。有解决方案吗?Lalit Kumar Barik很可能必须完成演员阵容。将代码更改为:if((bool)SESSION['logged_in']!=null&&(bool)SESSION['logged_in']==true)并告诉我它是如何进行的。明天我会正式测试这个。谢谢。如果(SESSION['logged_in']!=null&(bool)SESSION['logged_in']==true)-不必费心进行null检查。@“Wadih M.”使用od cast解决了问题。非常感谢。Lalit Kumar BarikZhaph,此解决方案是否包含用户广告用户名?您可以通过用户名/密码组合指定自己的用户列表吗?老实说,此解决方案假定您正在使用ASP.NET成员资格系统-通过内置SQL提供程序或您自己的提供程序:。但是,是的,您可以在web.config的credentials/users元素中提供用户名/密码组合:这还允许您使用if(Request.IsAuthenticated)之类的东西来检查用户是否登录,而不是依赖会话变量,等等:感谢您对角色主题的解释。我一定会在我未来的网站上使用这些知识。不幸的是,在目前的网站上,普通用户不需要登录。只有少数人需要登录才能访问这两个受限制的页面。我只需要一个简单的限制。