Здесь больше, чем кажется на первый взгляд. Вот более полное OnActionExecuting, которое использует ту же концепцию, которая уже обсуждалась выше, но добавляет немного больше. Смотрите встроенные комментарии для получения дополнительной информации. Вызываемая «InitializeSession» - это пользовательская функция, которая создает основные атрибуты, необходимые в состоянии сеанса для работы сайта. «AlertWarning» - это вспомогательная процедура для отображения предупреждений. Все остальное - стандартный код.
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var bRequiresAuthorization =
(filterContext.ActionDescriptor.GetCustomAttributes(typeof(AuthorizeAttribute), false).Length > 0) ||
(filterContext.Controller.GetType().GetCustomAttributes(typeof(AuthorizeAttribute), false).Length > 0);
if (filterContext.HttpContext.Session != null)
{
if (filterContext.HttpContext.Session.IsNewSession)
{
//New session. Initialize Session State
bool b = InitializeSession(null);
if (bRequiresAuthorization )
{
//Action requested requires authorized access. User needs to authenticate this
//new session first, so redirect to login
string cookie = filterContext.HttpContext.Request.Headers["Cookie"];
if ( (cookie != null) && (cookie.IndexOf("_SessionId=") >= 0) )
{
//An expired session cookie still resides on this PC, so first alert user that session is expired
AlertWarning("Session timed out due to inactivity. Please log in again.");
}
filterContext.Result = RedirectToAction("LogOut", "Authentication");
}
}
}
base.OnActionExecuting(filterContext);
}