0

如何在使用 ASP.NET 加载页面之前检查变量并重定向到另一个页面?

我知道生命周期,PageInit()听起来是对的,但我似乎找不到任何地方可以在 Visual Studio 中放置没有错误的代码。

我不能把它放在onpageinit=""我的页面声明的第一行。我想把它放在不同的地方吗?我的页面声明如下所示:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="dashboard.aspx.cs" Inherits="dashboard" MasterPageFile="~/Design.master" %>

这是我想在页面加载时运行的代码:

    // Check if the user is logged in, if not send them to the login page
    if (session.logged_in == false)
    {
        // Redirect the user to the login page
        Response.Redirect("login.aspx");

    }
4

4 回答 4

2

我建议您花时间阅读有关 Asp.Net 成员资格的信息。然后,如果您需要,实现您自己的MembershipProvider,以处理与验证用户请求有关的必要管道。

成员抽象非常有用,实现您自己的提供者确实不是那么困难。

也就是说,如果您真的想使用 Session 中的值来管理身份验证,您可以尝试将代码放在Application_PostAcquireRequestStateGlobal.asax 中的方法中。这样,您的代码将自动(几乎)为您的应用程序的所有请求调用,并且它也是会话可用的第一个可用事件(据我所知)。样本:

void Application_PostAcquireRequestState(object sender, EventArgs e)
{
    if (Session["LoggedUserName"] == null && !Request.Path.EndsWith("login.aspx"))
    {
        Response.Redirect("~/your/path/login.aspx");
    } 
}
于 2012-08-16T14:01:02.347 回答
1

我不知道一个onpageinit属性。session 变量独立于页面生命周期。会话始终可用。假设您始终使用相同的母版页,请将您的代码插入到母版页Pre_Init后面的代码中。

为此,请将覆盖添加到后面的代码中:

 protected override void OnPreInit(EventArgs e)
    {
        if (session.logged_in == false)
        {
          Response.Redirect("login.aspx", false);            
        }
    }
于 2012-08-16T13:50:08.753 回答
1

您必须覆盖页面的 OnInit 方法。将其放在您的代码后面的 Page_Load 事件上方(顺序无关紧要,但我相信组织很重要)...

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);

    // your code goes here
}

另外,根据您要完成的工作,我建议您查看 FormsAuthentication。有了它,您可以简单地指定安全文件夹和登录页面,如果访问者未通过身份验证,.NET 会处理将访问者踢到登录页面。

于 2012-08-16T14:11:05.467 回答
-1

您可以将此代码放在母版页中的任何位置以检查变量并在内容页面加载之前重定向到另一个页面。

protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        if (string.IsNullOrEmpty(Convert.ToString(Session["email"])) ||string.IsNullOrEmpty(Convert.ToString(Session["mobile"])))
        {
            Response.Redirect("Login.aspx");
        }
    }
于 2019-12-18T05:10:37.810 回答