我目前增加一个动作过滤器来处理会话超时在我们的网站:会话超时后,什么设置System.Security.Principal.Identity.IsAuthenticated?
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public class SsoExpireFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(!(filterContext.Controller.GetType() == typeof(HomeController)
&& filterContext.ActionDescriptor.ActionName == MVC.Home.ActionNames.Index))
{
if(filterContext.ActionDescriptor.ActionName != MVC.Home.ActionNames.TimeoutRedirect.ToLower())
{
if (!Thread.CurrentPrincipal.Identity.IsAuthenticated)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
filterContext.Result = new JsonResult { Data = "_Logon_" };
else
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{"Controller", "Home"},
{"Action", "TimeoutRedirect"}
});
}
}
}
base.OnActionExecuting(filterContext);
}
}
我期待在Principal.Identity的IsAuthenticated标志是假的以下超时,但它是真正的剩余,当它在被击中动作过滤器。 (我知道会话已经超时了,因为我在Global.asax的Session_End中放了一个断点,这首先被触发)。
我们网站的身份验证是由公司标准的“单一登录”DLL处理的,所以我猜测这是设置一个单独的身份验证超时,这听起来可能吗?
任何帮助表示赞赏。
我可能是错的,但我认为这篇文章可能会派上用场 http://www.hanselman.com/blog/SystemThreadingThreadCurrentPrincipalVsSystemWebHttpContextCurrentUserOrWhyFormsAuthenticationCanBeSubtle.aspx 或第 http://stackoverflow.com/questions/6810808/thread -currentprincipal-identity-vs-httpcontext-user-identity –