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