在每个请求上检查Request.ServerVariables [“HTTP_REFERER”]

时间:2012-06-20 11:10:05

标签: asp.net

我正在使用此代码检查请求是否来自某个页面,如果没有,则重定向到某个地方。

string referer = Request.ServerVariables["HTTP_REFERER"];
            if (string.IsNullOrEmpty(referer))
            {
                Response.Redirect("/UnauthorizedAccess.aspx");
            }

它正在工作,我不知道它是否是完美的解决方案。但是我正在检查我的一个页面的加载事件。如何检查每个请求。我应该检查所有我的这也是一个很好的方法。任何人都可以指出我正确的方向。欢迎提出任何建议。

2 个答案:

答案 0 :(得分:2)

如果你有逻辑,你希望在你的一堆页面的OnLoad上运行。您应该创建一个BasePage,它派生自Page并具有内部逻辑。然后,您希望该逻辑输入的所有页面都可以从BasePage而不是常规Page派生。

另一种方法可以是使用Master Pages

注意:在阅读OP附加评论后。使用母版页时要注意的一件事是,母版页的Page_Load事件发生在内容页的Page_Load事件之后。 换句话说,生命周期是这样的:

母版页初始事件

内容页初始事件

内容页面加载活动

母版页加载事件

如果您的response.redirect将用户移动到具有相同母版页的另一个页面(并且进行相同的“验证”检查),您可能会发现自己处于无限循环中:)

答案 1 :(得分:2)

如果你有很多页面,使用这些公共代码,一个可能的解决方案是创建自己的MyPage类作为标准Page类的子级。在MyPage中,您可以使用以下内容:

Page_Load(object sender, EventArgs e)
{
string referer = Request.ServerVariables["HTTP_REFERER"];
            if (string.IsNullOrEmpty(referer))
            {
                Response.Redirect("/UnauthorizedAccess.aspx");
            }
base.Page_Load(sender, e);
}

然后,您的任何页面都可以继承自己的MyPage类,而不是.NET的标准类。

通过这种方式,公共代码位于一个地方。如果有任何变化,您只需在那里进行修改。

或者另一种可能性,您可以考虑使用母版页。