当前位置 : 主页 > 网络编程 > ASP >

asp.net – MVC会话到期 – 继续左边

来源:互联网 收集:自由互联 发布时间:2021-06-24
我们有一个需要登录的内部ASP.NET MVC应用程序.登录工作很好,并做了预期的事情.我们的会话有效期为5分钟.在该段时间内坐在单个页面上之后,用户已经丢失了会话.如果他们尝试刷新当前
我们有一个需要登录的内部ASP.NET MVC应用程序.登录工作很好,并做了预期的事情.我们的会话有效期为5分钟.在该段时间内坐在单个页面上之后,用户已经丢失了会话.如果他们尝试刷新当前页面或浏览到另一个页面,他们将获得登录页面.

我的问题是(在重新登录之后)告诉MVC重定向到他们的(刷新/浏览)尝试而不是总是获得HOME控制器页面?

通常这应该自动发生.当匿名用户命中受保护资源时(由于会话过期,他是匿名用户),FormsAuthentication模块会拦截此请求,并通过附加指向受保护资源的ReturnUrl查询字符串参数重定向到您在web.config中注册的loginUrl.

因此,例如,如果您将〜/ Account / LogOn配置为您的登录URL,并且匿名用户尝试点击〜/ Foo / Bar受保护资源,他将被重定向到〜/ Account / LogOn?ReturnUrl = / Foo / Bar.

然后,他将看到一个登录页面,在那里他将输入他的凭据并将表单提交给帐户控制器上的[HttpPost] LogOn操作.将验证凭据,如果有效,将生成新的表单身份验证cookie,并将用户重定向到最初请求的受保护资源.

以下是LogOn操作中的相应代码:

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        if (Membership.ValidateUser(model.UserName, model.Password))
        {
            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
        {
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
        }
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}

注意成功验证后如何将用户重定向到默认的Home / Index或returnUrl参数.

当然,我在这里讲述的所有故事都适用于Visual Studio创建的默认ASP.NET MVC模板.如果由于某种原因您修改了此模板,这可能会解释您正在观察的行为.

在任何情况下,从我的回答中记住的事情是,如果您使用表单身份验证,模块将作为ReturnUrl查询字符串参数传递最初请求的受保护资源到配置的登录页面.因此,在成功进行身份验证后,您可以将用户重定向到此页面.

网友评论