gpt4 book ai didi

asp.net - MVC session 过期 - 从剩下的地方继续

转载 作者:行者123 更新时间:2023-12-02 12:15:55 24 4
gpt4 key购买 nike

我们有一个需要登录的内部 ASP.NET MVC 应用程序。登录效果很好并且符合预期。我们的 session 过期时间为 5 分钟。在停留在单个页面上一段时间后,用户就失去了 session 。如果他们尝试刷新当前页面或浏览到另一个页面,他们将获得登录页面。

我的问题是(重新登录后)在哪里告诉 MVC 重定向到他们的(刷新/浏览)尝试而不是始终获取 HOME Controller 页面?

最佳答案

通常这应该自动发生。当匿名用户访问 protected 资源时(他是匿名的,因为他的 session 已过期),FormsAuthentication 模块会拦截此请求并通过附加 ReturnUrl 重定向到您在 web.config 中注册的 loginUrl 指向 protected 资源的查询字符串参数。

因此,例如,如果您将 ~/Account/LogOn 配置为登录 URL,并且匿名用户尝试访问 ~/Foo/Bar protected 资源,他将被重定向到 ~/Account/LogOn?ReturnUrl=%2FFoo%2FBar

然后,他将看到一个登录页面,他将在其中输入凭据并将表单提交到 Account< 上的 [HttpPost] LogOn 操作 Controller 。将验证凭据,如果有效,将生成新的表单例份验证 cookie,并将用户重定向到最初请求的 protected 资源。

以下是 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/IndexreturnUrl 参数。

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

无论如何,从我的回答中要记住的是,如果您使用表单例份验证,该模块会将最初请求的 protected 资源作为 ReturnUrl 查询字符串参数传递到配置的登录页面。因此,您需要在身份验证成功后将用户重定向到此页面。

关于asp.net - MVC session 过期 - 从剩下的地方继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19518846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com