Сессивная переменная теряется?

Учитывая этот файл 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);
                    }
                }
            }
        }
    }
}
  • Пользователь попадает в webapp и отображается Introduction.aspx
  • Пользователь продолжает использовать webapp в течение нескольких минут (ASP.NET_SessionId: ublbhu45ji31e055ywqu0555)
  • Пользователь простаивает (не выполняет никаких обратных передач) в течение нескольких минут
  • Пользователь выполняет обратную передачу
  • Пользователь показывается Introduction.aspx
  • Второй осмотр пользователя ASP.NET_SessionId cookie по-прежнему показывает ublbhu45ji31e055ywqu0555

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

+1
источник поделиться
1 ответ

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

Последствия могут быть двумя: 1) Сессия отключается из-за значения конфигурации тайм-аута (я не знаю случая в вашем конкретном экземпляре)

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

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос