Переменная сессии теряется? - PullRequest
1 голос
/ 22 сентября 2010

С учетом этого Global.asax.cs:

using System;
using System.Web;

namespace Foo.Web {
    public class Global : HttpApplication {
        private const string IntroductionPageShownSessionKey = "IntroductionPageShownSessionKey";

        protected void Application_AcquireRequestState(object sender, EventArgs e) {
            ShowIntroductionIfNotYetShown();
        }

        private void ShowIntroductionIfNotYetShown() {
            if (HttpContext.Current.Session != null) {
                var introductionPageShown = Convert.ToBoolean(Session[IntroductionPageShownSessionKey]);
                if (!introductionPageShown) {
                    if (Request.Path.EndsWith("/Introduction.aspx")) {
                        Session[IntroductionPageShownSessionKey] = true;
                    }
                    else {
                        Response.Redirect("~/Introduction.aspx" + Request.Url.Query);
                    }
                }
            }
        }
    }
}
  1. Пользователь нажимает веб-приложение и отображается Введение.aspx
  2. Пользователь продолжает использовать веб-приложение в течение нескольких минут (ASP.NET_SessionId: ublbhu45ji31e055ywqu0555)
  3. Пользователь бездействует (не выполняет никаких обратных передач) на несколько минут
  4. Пользователь выполняет обратную передачу
  5. Отображается пользователь Введение.aspx
  6. Вторая проверка файла cookie ASP.NET_SessionId пользователя по-прежнему показывает, что пользователь ublbhu45ji31e055ywqu0555

Почему во второй раз в том же сеансе ASP.NET пользователю показывается Введение.apsx?Я знаком с риском установки переменных сеанса непосредственно перед перенаправлением в том же постбеке , но это здесь не применимо, верно?

1 Ответ

0 голосов
/ 22 сентября 2010

Имейте в виду, что сам сеанс, вероятно, имеет более короткое время жизни, чем cookie-файл сеанса, отправляемый в браузер, и значение идентификатора, установленное в этом cookie-файле.Фактически, браузер может продолжать передавать старый идентификатор сеанса, а сервер примет его и создаст из него новый сеанс, если срок старого истек.

Возможны следующие два варианта: 1) Сессияистекает из-за значения конфигурации тайм-аута (я не знаю случая в вашем конкретном случае)

2) Что мы выяснили с тех пор в вашем случае с помощью комментариев к этому вопросу: домен приложения закрывалсяили перерабатывается.

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