我正在localhost
开发项目,我希望用户打开除home.aspx
,contact.aspx
,about.aspx
,services.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();
}
答案 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文件。