3

ログオンが必要な内部 ASP.NET MVC アプリケーションがあります。ログオンはうまく機能し、期待どおりに機能します。セッションの有効期限は 5 分です。その期間 1 つのページに座った後、ユーザーはセッションを失いました。現在のページを更新したり、別のページを参照しようとすると、ログオン ページが表示されます。

私の質問は、(再ログイン後)HOMEコントローラーページを常に取得する代わりに、MVCに(更新/閲覧)試行にリダイレクトするように指示する場所ですか?

4

3 に答える 3

2

通常、これはAccountControllerASP.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、ヘルパー メソッドで見られるデフォルトの ) にユーザーを誘導します。

アプリケーションはこの一連のイベントを維持していますか? そうでない場合、この一連の出来事はどこで断ち切られますか? 慣例に従い、次のことを行う必要があります。

  1. returnUrlセッション有効期限リダイレクトからを受け取ります。
  2. returnUrlログインフォームにを含めます。
  3. returnUrlログインに成功した後、ユーザーを にリダイレクトします。
于 2013-10-22T13:23:45.183 に答える