Мы используем состояние сеанса SQL вне процесса, ASP.NET 3.5 MVC 1.0 и проверку подлинности с помощью форм с использованием IIS 7.
Сеанс пользователя правильно настроен при входе в систему и истечет время ожидания, перенаправляя ихна специальной странице входа "Тайм-аут".Проблема в том, что некоторые (не все) пользователи входят в систему и (из того, что я могу сказать) сразу же не проходят проверку подлинности и должны войти в систему (т.е. перенаправлены на исходную страницу «Вход в систему»).
Может кто-нибудьу вас есть идея, почему наших пользователей периодически выгнали?
РЕДАКТИРОВАТЬ: с тех пор я добавляю логирование на каждое событие Application_AuthenticateRequest, я могу сказать вам, что до того, как пользователь будет загружен, оба билета Auth аутентифицируются, сохраняютсяи истекает через два дня, и запрос также подтверждается.По прибытии на страницу входа пользователь больше не проходит проверку подлинности.
РЕДАКТИРОВАТЬ # 2: мы добились определенного прогресса, может показаться, что пользователи могут не проходить проверку подлинности, поскольку это веб-приложение ищет сценарии и другой контентв родительском приложении, для которого пользователи не проходят проверку подлинности.Исходный формат для включения этих сценариев следующий:
<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
Я исправил его следующим образом:
<script src="<%= Url.Content("~/Scripts/MicrosoftAjax.js") %>" type="text/javascript"></script>
ОТВЕТ Вышеуказанные изменения в наших ссылках на сценариина наших страницах .master проблема решена.Он явно указывает приложению искать в корневой папке текущего приложения.Спасибо всем, кто помог.Я хотел бы отметить несколько ответов!
Ниже приведено наше действие для входа в систему:
[AcceptVerbs(HttpVerbs.Post)]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings",
Justification = "Needs to take same parameter type as Controller.Redirect()")]
public virtual ActionResult LogOn(string userName, string password, string returnUrl)
{
if ((HttpContext.Current.User == null) || (!HttpContext.User.Identity.IsAuthenticated))
{
if (!ValidateLogOn(userName, password))
{
try
{
return View();
}
catch (Exception ex)
{
throw new Exception(string.Format("User validation failed at LogOn: {0}", ex.ToString()));
}
}
}
bool rememberMe = true;
FormsAuth.SignIn(userName, rememberMe);
Session["userName"] = userName;
if (!String.IsNullOrEmpty(returnUrl))
{
try
{
return Redirect(returnUrl);
}
catch (Exception ex)
{
throw new Exception(string.Format("User redirect to returnUrl ({0}) failed: {1}", returnUrl, ex.ToString()));
}
}
else
{
try
{
return RedirectToAction("Index", "RodWebUI");
}
catch (Exception ex)
{
throw new Exception(string.Format("User redirect to action: Index, controller: RodWebUi failed: {0}", ex.ToString()));
}
}
}
Ниже приведено действие timeoutlogon:
public virtual ActionResult TimeOutLogon()
{
try
{
FormsAuth.SignOut();
ViewData["TimeoutMsg"] = "Session timed out. Please log back in.";
return View();
}
catch (Exception ex)
{
throw new Exception(string.Format("Error with redirecting to TimeOutLogon: {0}", ex.ToString()));
}
}
IС тех пор мы добавили следующую проверку в наш global.asax для регистрации текущего состояния запроса и заявки на авторизацию.Все проверено и все в порядке, прежде чем вернуться в LogOn.
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
if (HttpContext.Current.User.Identity is FormsIdentity)
{
FormsIdentity identity = (FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = identity.Ticket;
LogFunctionCall(HttpContext.Current.User.Identity.Name, "", "User Authentication Check", "",
string.Format("Auth ticket is expired: {0}, expiration date: {1}, is persistent: {2}, issued: {3}",
ticket.Expired, ticket.Expiration, ticket.IsPersistent, ticket.IssueDate), "", 0);
LogFunctionCall(HttpContext.Current.User.Identity.Name, "", "User Authentication Check Line #2", "",
string.Format("Raw URL: {0}, Request is authenticated: {1}", HttpContext.Current.Request.RawUrl, HttpContext.Current.Request.IsAuthenticated), "", 0);
}
}
}
}