誰かが ASP.Net MVC 4 アプリケーションにログインすると、ログイン画面に戻ることがよくあります。資格情報を再入力すると、常に正常にログインできます。ロギングにより、両方の試行で正しい資格情報が入力されたことが確認されます。
ログインコードは次のようになります
[AllowAnonymous]
[HttpPost]
public ActionResult Login(LogOnModel model, string returnUrl)
{
try
{
MyData md = (MyData)Session["MyData"]; // Should be null, but testing that it is after logging out and back in
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
logger.Info("Successful login '" + model.UserName + "' from IP " + Request.IPAddresses());
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
logger.Warn("Login failed '" + model.UserName + "' from IP " + Request.IPAddresses());
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
else
{
logger.Warn("Login failed (model state invalid) '" + model.UserName + "' from IP " + Request.IPAddresses());
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
// If we got this far, something failed, redisplay form.
logger.Warn("Something failed during login. Redisplaying login form.");
}
catch (Exception ex)
{
logger.Warn("Exception during logon process: " + ex.Message);
}
return View(model);
}
変数loggerは、デフォルトの NLog クラスのロガーです。
隔離された環境で問題を再現した直後のログ ファイルは次のようになります。
2012-08-22 10:51:25.4581 INFO IP 10.0.0.21 からの正常なログイン「デモ」
2012-08-22 10:51:39.9741 INFO IP 10.0.0.21 からの正常なログイン「デモ」
ログインの失敗または例外を示す警告ログ エントリがログ ファイルに存在しません。
これは、Web サーバーがしばらくアイドル状態になっていると、より頻繁に発生するようです。
問題を診断/解決するにはどうすればよいですか?