Переменная сеанса и мастер-страницы - PullRequest
2 голосов
/ 04 января 2012

Я хочу войти в сессию пользователей на моем сайте.Я надеялся просто установить переменную сеанса.Но его инициализация вызывает у меня проблемы.

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["SESSION_GUID"] == null)
    {
        Session["SESSION_GUID"] = Guid.NewGuid().ToString();
        Response.Redirect(Request.Url.ToString(), true);
        return;
    }
    lnkUpload.Visible =  (Session["LOGGED_IN"] != null);
    btnLogout.Visible = (lnkUpload.Visible);
}

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

Есть идеи, почему дочерняя страница этой мастер-страницы загружается дважды?Это происходит только при первом обращении к сайту.После этого сессия работает нормально, и мы получаем только один удар.

Ответы [ 2 ]

3 голосов
/ 04 января 2012

Событие Page_Load на странице содержимого будет вызываться перед Page_Load главной страницы, как показано в шагах 6-7 в ASP.NET Page Lifecycle

Событие главной страницы Page_Init вызывается перед событием страницы содержимого Page_Init, поэтому, если все, что вы делаете, проверяет Session, вероятно, лучше всего обработать его в Page_Init главной страницы и перенаправить туда.Это может вызвать проблемы в зависимости от того, как выглядит другой код в вашем проекте, но концептуально первое, что вы хотите сделать, это проверить Session и правильно обработать его, поэтому вам не нужно загружать страницу / элементы управления перед обработкой перенаправления.

0 голосов
/ 04 января 2012

Попробуйте выполнить Response.End () на главной странице. Это остановит визуализацию оставшейся разметки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...