我有一个 MVC4 应用程序Windows Authentication
。用户可以键入 10 个视图中任何一个的 url 来加载应用程序。没有具体的主页
如果用户空闲超过一分钟,我需要重定向到会话超时视图。我将配置文件中的会话超时值保留为一分钟。我创建了一个action filter
来检查一个特定的会话值。此特定会话值设置Session_Start
在Global.asax
.
但是,当超时期限结束时,请求再次命中Session_Start
并分配值。因此,我的操作过滤器不会重定向到错误视图。有什么可能的解决方案来克服这个问题?
网络配置
<system.web>
<!--Impersonate-->
<identity impersonate="true"/>
<!--Session Mode and Timeout-->
<sessionState mode="InProc" timeout="1" />
<authentication mode="Windows">
</authentication>
<authorization>
<allow users="?" />
</authorization>
</system.web>
动作过滤器
[AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public class SessionCheckAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
{
string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName.ToLower();
HttpSessionStateBase session = filterContext.HttpContext.Session;
var activeSession = session["IsActiveSession"];
if (activeSession == null)
{
//Redirect
var url = new UrlHelper(filterContext.RequestContext);
var loginUrl = url.Content("~/Error/SessionTimeout");
filterContext.HttpContext.Response.Redirect(loginUrl, true);
}
}
}
全球.ASAX
protected void Session_Start(object sender, EventArgs e)
{
Session["IsActiveSession"] = DateTime.Now;
}