Necesito un reciclaje de grupo de aplicaciones para ser completamente transparente para los usuarios de mi aplicación web.MVC: los usuarios deben volver a autenticarse en IIS Recycle
Actualmente, en un reciclado del grupo de aplicaciones de IIS 7, todos los usuarios que inician sesión en mi aplicación web son expulsados y deben volver a iniciar sesión (Context.User.Identity.IsAuthenticated se establece en falso). Empleo SQL State Server, utilizo autenticación de formularios y ambos están configurados para usar cookies. Tenía la impresión de que .NET y/o IIS manejan la autenticación de las cookies.
Sin embargo, cada vez que se recicla el grupo de aplicaciones Context.User.Identity.IsAuthenticated se establece en false (y no tengo ni idea de dónde ocurre esto) mis usuarios son expulsados y deben volver a iniciar sesión. Puedo veo que la identificación de la sesión permanece igual a través de los inicios de sesión, también puedo ver esta información de la sesión en la base de datos/servidor de estado.
No sé si es una sesión o un problema con las cookies.
Por favor ayuda!
métodoinicio de sesión:
public ActionResult LogOn(string userName, string password, bool rememberMe, string returnUrl)
{
if (!ValidateLogOn(userName, password))
{
return View();
}
FormsAuth.SignIn(userName, true); // uses FormsAuthentication.SetAuthCookie(username, true);
Session["userName"] = userName;
if (!String.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
controlador personalizado Atributo:
public class CookieAuthorizeAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpContext lvContext = HttpContext.Current;
if (!lvContext.User.Identity.IsAuthenticated)
{
lvContext.Response.Redirect("~/Account/Logon");
}
else
{
FormsIdentity identity = (FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthentication.RenewTicketIfOld(identity.Ticket);
}
base.OnActionExecuting(filterContext);
}
}
WebConfig:
<authentication mode="Forms">
<forms cookieless="UseCookies" loginUrl="~/Account/LogOn" slidingExpiration="true" name=".ASPXAUTH" requireSSL="false" timeout="2880" />
</authentication>
<modules runAllManagedModulesForAllRequests="true">
<remove name="ScriptModule" />
<remove name="UrlRoutingModule" />
<remove name="Session" />
<remove name="FormsAuthentication" />
<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add name="NHibernateMvcSessionModule" type="EpnNHibernateBase.NHibernateMvcSessionModule, EpnNHibernateBase" />
<add name="Session" type="System.Web.SessionState.SessionStateModule" />
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
</modules>
Creo que esto podría no estar claro a partir de su pregunta, pero ¿está ejecutando el StateServer en la misma máquina/VM que el servidor web? Porque si lo está, creo que StateServer confía en IIS, por lo que eliminar AppPool también reducirá StateServer. –
Sí, estoy ejecutando esto localmente (en el mismo servidor que el Pool de aplicaciones/IIS). – alan
Acabo de encontrarme con esta publicación y pensé que haría una ligera corrección al comentario anterior. StateServer es un servicio separado de Windows por lo que continuará ejecutándose sin perder los datos de estado, incluso si IIS se reinicia por completo. –