鉴于此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);
}
}
}
}
}
}
为什么用户在同一个ASP.NET会话中第二次显示Introduction.apsx?我很熟悉w / the risk in setting session variables just before a redirect in the same postback,但这不适用于此,对吧?
答案 0 :(得分:0)
请记住,Session本身的生命周期可能比发送到浏览器的会话cookie和该cookie中设置的ID值短。实际上,浏览器可以继续提交旧的会话ID,如果旧的过期,服务器将接受它并从中创建一个新的会话。
影响是两种可能性: 1)由于超时配置值(我不知道你的特定实例中的情况)会话超时
2)我们在您的案例中通过对此问题的评论已经弄清楚:AppDomain正在关闭或被回收。