Проверьте переменную сеанса и перенаправьте на страницу входа перед загрузкой страницы

Как я могу проверить переменную и перенаправить на другую страницу до загрузки страницы с помощью 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");

    }

person Luke    schedule 16.08.2012    source источник


Ответы (4)


Вы должны переопределить метод OnInit страницы. Поместите это чуть выше (порядок не имеет значения, но я считаю, что организация важна) вашего события Page_Load в вашем коде позади...

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

    // your code goes here
}

Кроме того, в зависимости от того, чего вы пытаетесь достичь, я бы посоветовал изучить FormsAuthentication. При этом вы можете просто указать безопасные папки и страницу входа в систему, а .NET обрабатывает отправку посетителя на страницу входа, если он не прошел проверку подлинности.

person CoderMarkus    schedule 16.08.2012

Я предлагаю вам найти время, чтобы прочитать о членстве в Asp.Net. Затем, если вам нужно, реализуйте свой собственный MembershipProvider, который позаботится о необходимой сантехнике в отношении аутентификации пользовательских запросов.

Абстракция членства действительно полезна, и реализация собственного провайдера на самом деле не так сложна.

Тем не менее, если вы действительно хотите использовать значение из сеанса для управления аутентификацией, вы можете попробовать поместить код в метод Application_PostAcquireRequestState в Global.asax. Таким образом, ваш код будет автоматически вызываться для (почти) всех запросов к вашему приложению, а также это первое доступное событие, когда доступен сеанс (насколько я знаю). Образец:

void Application_PostAcquireRequestState(object sender, EventArgs e)
{
    if (Session["LoggedUserName"] == null && !Request.Path.EndsWith("login.aspx"))
    {
        Response.Redirect("~/your/path/login.aspx");
    } 
}
person user1429080    schedule 16.08.2012

Мне неизвестен атрибут onpageinit. Переменная сеанса не зависит от жизненного цикла страницы. Сессия доступна всегда. Предполагая, что вы всегда используете одну и ту же главную страницу, вставьте свой код в Pre_Init в код позади главной страницы.

Для этого добавьте переопределение в код позади:

 protected override void OnPreInit(EventArgs e)
    {
        if (session.logged_in == false)
        {
          Response.Redirect("login.aspx", false);            
        }
    }
person P.Brian.Mackey    schedule 16.08.2012
comment
@Coulton — добавлена ​​сигнатура метода. - person P.Brian.Mackey; 16.08.2012
comment
Спасибо. Я заметил, что мой редирект не будет работать оттуда. Любые идеи? - person Luke; 16.08.2012

вы можете разместить этот код в любом месте мастер-страницы, чтобы проверить переменную и перенаправить на другую страницу до загрузки страницы содержимого.

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");
        }
    }
person Suraj Gupta    schedule 18.12.2019
comment
В чем вопрос? - person gsscoder; 18.12.2019
comment
вы хотите проверить переменную и перенаправить на другую страницу до загрузки страницы контента - person Suraj Gupta; 18.12.2019
comment
Хорошо, Сурадж Гупта. Я предлагаю добавить расширенную версию этого комментария и отредактировать вопрос. Ваши шансы получить помощь увеличатся! Все сообщество будет наслаждаться общими знаниями. заранее спасибо - person gsscoder; 18.12.2019