如何将我网站的所有页面重定向到login.aspx? ASP.NET C#

时间:2016-07-13 13:12:53

标签: c# asp.net

我正在localhost开发项目,我希望用户打开除home.aspxcontact.aspxabout.aspxservices.aspx之外的任何页面,然后它如果用户未登录,则重定向到login.aspx

第二件事是我在下面的代码中面临问题object reference not set of instance object

我希望当用户的会话过期时,它也会重定向到login.aspx。 我试图保护我的项目页面。感谢并抱歉英语不好。

protected void Page_Load(object sender, EventArgs e) 
{ 
   welcome.InnerText = Session["name"].ToString(); 
} 

2 个答案:

答案 0 :(得分:2)

将以下内容放入system.web部分的网络配置中。

 <authorization>
    <deny users="?" />
 </authorization>

上述内容不允许未经身份验证的用户访问网站中的任何网页。现在,通过在Web配置文件中使用以下配置,为希望未经身份验证的用户访问的每个页面添加一个部分。在结束configuration标记之前添加下面的配置。 我假设所有允许的页面都在您网站的根目录下。

  <location path="Home.aspx">
    <system.web>
      <authorization>
        <allow users="?" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>

使用上述部分的示例Web配置

<configuration> 
<system.web>
  <authentication mode="Forms" />
  <!--this is the first part-->
  <authorization>
    <deny users="?" />
  </authorization>
  <sessionState mode="InProc" cookieless="false" timeout="540"/>
  <compilation debug="true" targetFramework="4.0"/>
</system.web>
  <!--this is the second part-->
  <location path="Home.aspx">
    <system.web>
      <authorization>
        <allow users="?" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="Services.aspx">
    <system.web>
      <authorization>
        <allow users="?" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="Contact.aspx">
    <system.web>
      <authorization>
        <allow users="?" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="About.aspx">
    <system.web>
      <authorization>
        <allow users="?" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
</configuration>

注意:如果您要允许访问未经身份验证的用户的网页不在网站根目录下,但在某个文件夹(如customer/Services.aspx下),请确保在上述配置中将路径替换为customer/Services.aspx。如下所示。

配置允许页面不在网站根目录下但在某个文件夹下

  <location path="customer/Services.aspx">
    <system.web>
      <authorization>
        <allow users="?" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>

关于您的第二个问题,您应该在获取它的值时检查name的会话变量是否存在。因此,您需要使用以下代码。

第二期问题解决方案

protected void Page_Load(object sender, EventArgs e) 
{ 
  if (Session["name"] != null) 
   { 
     welcome.InnerText = Session["name"].ToString(); 
   } 
} 

答案 1 :(得分:1)

@Sunil贡献的内容将否认未知用户。这样,如果会话已过期,将拒绝用户访问。问题是这将阻止访问整个站点,而@Hameed要求仍然可以访问特定页面。我通常构建网站的方式是将非安全页面放在根目录中,并将安全页面放在子目录中。然后为安全性创建一个新的web.config文件。