加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 09:25:24 所属栏目:asp.Net 来源:网络整理
导读:我们有一个需要登录的内部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查询字符串参数传递最初请求的受保护资源到配置的登录页面.因此,在成功进行身份验证后,您可以将用户重定向到此页面.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读