Мне нужна утилизация пула приложений, чтобы она была полностью прозрачной для пользователей моего веб-приложения.
В настоящее время после перезапуска пула приложений IIS 7 все пользователи, вошедшие в мое веб-приложение, удаляются и должны войти в систему (Context.User.Identity.IsAuthenticated имеет значение false). Я использую SQL State Server, использую проверку подлинности с помощью форм, и оба настроены на использование файлов cookie. У меня сложилось впечатление, что .NET и / или IIS обрабатывают проверку подлинности файлов cookie.
Однако каждый раз, когда пул приложений перерабатывается Context.User.Identity.IsAuthenticated имеет значение false (и я не знаю, где это происходит), мои пользователи выгнаны и должны войти в систему. Я вижу что идентификатор сеанса остается неизменным во время входа в систему, я также могу просмотреть эту информацию сеанса в базе данных / сервере состояний.
Я не могу сказать, является ли это сеанс или проблема с cookie.
Пожалуйста, помогите!
Метод входа в систему:
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");
}
}
Пользовательский атрибут контроллера:
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>