ログオンが必要な内部 ASP.NET MVC アプリケーションがあります。ログオンはうまく機能し、期待どおりに機能します。セッションの有効期限は 5 分です。その期間 1 つのページに座った後、ユーザーはセッションを失いました。現在のページを更新したり、別のページを参照しようとすると、ログオン ページが表示されます。
私の質問は、(再ログイン後)HOMEコントローラーページを常に取得する代わりに、MVCに(更新/閲覧)試行にリダイレクトするように指示する場所ですか?
ログオンが必要な内部 ASP.NET MVC アプリケーションがあります。ログオンはうまく機能し、期待どおりに機能します。セッションの有効期限は 5 分です。その期間 1 つのページに座った後、ユーザーはセッションを失いました。現在のページを更新したり、別のページを参照しようとすると、ログオン ページが表示されます。
私の質問は、(再ログイン後)HOMEコントローラーページを常に取得する代わりに、MVCに(更新/閲覧)試行にリダイレクトするように指示する場所ですか?
通常、これはAccountController
ASP.NET MVC アプリケーションの ですぐに使用できます。デフォルトのLogin
アクションを見てみましょう。
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
return RedirectToLocal(returnUrl);
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}
// later...
private ActionResult RedirectToLocal(string returnUrl)
{
if (Url.IsLocalUrl(returnUrl))
return Redirect(returnUrl);
return RedirectToAction("Index", "Home");
}
セッションが期限切れになり、ユーザーがログイン ページにリダイレクトされると、システムはそのリダイレクトにパラメーターを提供する必要があります。returnUrl
アプリケーションにない場合、この場合、アプリケーションの何がデフォルトと異なっていますか?
Login
ユーザーがログイン ページにリダイレクトされた後にログイン ページをレンダリングする最初のアクションが、 ViewBag
. このページのデフォルト ビューはform
要素に値を追加するため、ログイン POST 要求に含まれます。そのリクエストを受け取る2 番目のLogin
アクションは、指定された URL (または/Index/Home
、ヘルパー メソッドで見られるデフォルトの ) にユーザーを誘導します。
アプリケーションはこの一連のイベントを維持していますか? そうでない場合、この一連の出来事はどこで断ち切られますか? 慣例に従い、次のことを行う必要があります。
returnUrl
セッション有効期限リダイレクトからを受け取ります。returnUrl
ログインフォームにを含めます。returnUrl
ログインに成功した後、ユーザーを にリダイレクトします。