Check Session variable and Redirect to login page before page load

Luke picture Luke · Aug 16, 2012 · Viewed 16.2k times · Source

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 would be right, but I can't seem to find anywhere to put the code without and error within Visual Studio.

I can't put the onpageinit="" within the first line of my page declaration. Am I suppose to put it somewhere different? My page declaration looks like:

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

This is the code that I want to run on the page load:

    // 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");

    }

Answer

user1429080 picture user1429080 · Aug 16, 2012

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");
    } 
}