10秒后MVC3会话超时

需要一些ASP.Net Web应用程序中的会话超时问题的帮助。 基本上会话在登录后大约10-15秒到期。

附注:我使用FormsAuthentication和基本安全性的自定义组合

我的Session.IsNewSession在登录后3-4次良好的回发后设置为true。

我的Web.Config有以下……

    

我相信超时指的是分钟….

我有一个注册了ActionFilter的MVC 3应用程序

  public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new MyActionFilterAttribute()); } 

在OnActionExecuting内部,我检查当前会话以防止访问未授权用户无法访问的控制器操作。

  public override void OnActionExecuting(ActionExecutingContext filterContext) { HttpContext ctx = HttpContext.Current; Player player = SessionHelper.GetCurrentPlayer(filterContext.HttpContext.Session); if (player == null && ctx != null) { player = SessionHelper.GetCurrentPlayer(ctx.Session); } if (player == null || (player.IsAdministrator == false && player.IsCoach == false && player.IsCommittee == false)) { if (filterContext.Controller is HomeController || filterContext.Controller is AccountController) { base.OnActionExecuting(filterContext); return; } string ctxError = ctx != null ? "Context Exists" : "Context Doesnt Exist"; string sessionError = filterContext.HttpContext.Session != null ? "filterContext.HttpContext.Session Exists" : "filterContext.HttpContext.Session Doesnt Exist"; string requestSessionError = filterContext.RequestContext.HttpContext.Session != null ? "filterContext.RequestContext.HttpContext.Session Exists" : "filterContext.RequestContext.HttpContext.Session Doesnt Exist"; throw new SecurityException(string.Format("Attempt to access {0} by user at {1} - {2} ({3}, {4}, {5})", filterContext.HttpContext.Request.RawUrl, filterContext.HttpContext.Request.UserHostAddress, filterContext.HttpContext.Session, ctxError, sessionError, requestSessionError)); } base.OnActionExecuting(filterContext); } 

所以我已经确定Web服务器比我的会话生命周期更快地刷新它的AppPool。 这将导致使用相同的SessionId,但也要设置IsNewSession标志。

由于我无法控制AppPool的生命周期,因此我能够在IIS中将会话保持在InProc模式。

我通过将会话状态持久性移动到托管的SqlServer数据库来解决该问题,从而允许会话在AppPool被回收的情况下保持不变。

我建议任何其他人在他们没有管理访问权限的服务器上托管时,看到其他人稳定的网站失去会话状态的解决方案。

哦,我发现IIS日志在这里毫无用处。 我发现,这里记录的最佳诊断是我自己的手动记录,以确定这是情景。