Check Session variable and Redirect to login page before page load

后端 未结 4 1406
旧时难觅i
旧时难觅i 2021-01-07 13:05

How can I check a variable and redirect to another page before the page loads using ASP.NET?

I\'m aware of the life cycle, and PageInit() sounds like it

相关标签:
4条回答
  • 2021-01-07 13:15

    You have to override the OnInit method of the page. Place this just above (order doesn't matter, but I believe organization is important) your Page_Load event in your code behind...

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
    
        // your code goes here
    }
    

    Also, depending on what you are trying to accomplish, I would suggest looking into FormsAuthentication. With that you can simply specify secure folders and a login page and .NET handles kicking the visitor to the login page if they are not authenticated.

    0 讨论(0)
  • 2021-01-07 13:15

    I suggest you take the time to read up about Asp.Net membership. Then if you need to, implement your own MembershipProvider that will take care of the necessary plumbing with regards to authenticating user requests.

    The membership abstraction is really useful and implementing your own provider is really not that difficult.

    That said, if you really want to use a value from the Session to manage authentication, you could try to put the code in the Application_PostAcquireRequestState method in Global.asax. That way your code will automatically be called for (almost) all request to your application, and it is also the first available event where the session is available (as far as I know). Sample:

    void Application_PostAcquireRequestState(object sender, EventArgs e)
    {
        if (Session["LoggedUserName"] == null && !Request.Path.EndsWith("login.aspx"))
        {
            Response.Redirect("~/your/path/login.aspx");
        } 
    }
    
    0 讨论(0)
  • 2021-01-07 13:21

    I'm not aware of an onpageinit attribute. The session variable is independent of the page life cycle. Session is always available. Assuming you always use the same master page, insert your code in Pre_Init in the code behind of the Master Page.

    To do this, add the override to the code behind:

     protected override void OnPreInit(EventArgs e)
        {
            if (session.logged_in == false)
            {
              Response.Redirect("login.aspx", false);            
            }
        }
    
    0 讨论(0)
  • 2021-01-07 13:35

    you can place this code anywhere in the masterpage to check a variable and redirect to another page before the content page loads.

    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");
            }
        }
    
    0 讨论(0)
提交回复
热议问题