В настоящее время я работаю над частью логики Session expired для моего проекта ASP.NET 3.5 MVC 2, чтобы выйти из системы пользователя и перенаправить его в действие AccountOontroller LogOn.
У меня есть следующий атрибут во всех моих действиях, связанных с состоянием сеанса, и этот фрагмент кода работает в IE 8, но не в Firefox 4 или Google Chrome 10. Симптом возникает, когда я пытаюсь перейти к представлению, представленному действие с моим атрибутом [SessionExpireFilter], свойство ctx.Session.IsNewSession в приведенном ниже коде оценивается как «true» каждый раз, даже если я только на секунд в моем 30-минутном сеансе.
public class SessionExpireFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpContext ctx = HttpContext.Current;
// check if session is supported
if (ctx.Session != null && ctx.Session.IsNewSession)
{
// If it says it is a new session, but an existing cookie exists, then it must
// have timed out
string sessionCookie = ctx.Request.Headers["Cookie"];
if ((null != sessionCookie) && (sessionCookie.IndexOf("ASP.NET_SessionId") >= 0))
{
FormsAuthentication.SignOut();
ctx.Response.Redirect("~/Account/LogOn");
}
}
base.OnActionExecuting(filterContext);
}
}
Есть ли способ выяснить, почему Chrome и Firefox ведут себя так, а IE - нет? Заранее спасибо.
РЕДАКТИРОВАТЬ: Это не работает в FF, как я изначально верил. Я сразу после входа в систему пытаюсь получить доступ к своему действию с помощью моего атрибута SessionExpireFilter.