我正在MVC3中开发一个应用程序,我有一个登录页面。一旦用户登录页面,问题出现在他/她点击浏览器的后退按钮时,它会将他们带回到我不想要的登录页面。
简而言之,我希望登录功能与facebook,gmail和其他类似网站完全相同。
我想到的一种方法是在登录后找到一种控制浏览器后退按钮的方法,因此如果单击它,则将用户重定向到相同的登录页面。 我做了很多研究,但似乎没有什么对我有用。
任何人都会非常感激。在此先感谢。
答案 0 :(得分:4)
虽然Darin提供的解决方案可行。但如果你问我,facebook还没有实现这个解决方案。 我相信一个适当的解决方案应该不是很难实现。 我们需要做两件事。
确保经过身份验证的用户无法访问登录页面。
您可以按如下方式修改登录get方法
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
//Important
if (Request.IsAuthenticated)
{
return RedirectToAction("Action", "Controller"); // ur action and controller
}
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);
}
确保未缓存登录页面
将此代码放在上面的方法中,以确保永远不会从缓存中返回逻辑页
Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
Response.Cache.SetValidUntilExpires(false);
Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
或者你可以在Login方法上使用NoCache
ActionFilter。它将做与上面相同的事情。
答案 1 :(得分:3)
您可以将以下脚本放在登录视图中(包含用户名和密码字段的脚本):
<script type="text/javascript">
window.history.forward();
</script>
答案 2 :(得分:0)
如果您的登录httpget操作有一个NoCache操作过滤器以阻止浏览器缓存它,那么如果用户通过后退按钮返回它,浏览器将请求一个新的登录页面,控制器操作代码可以检测到用户已经过身份验证,并将其重定向到其他页面。