如何防止登录用户访问登录页面

时间:2013-06-22 10:13:00

标签: asp.net asp.net-mvc

我正在MVC3中开发一个应用程序,我有一个登录页面。一旦用户登录页面,问题出现在他/她点击浏览器的后退按钮时,它会将他们带回到我不想要的登录页面。

简而言之,我希望登录功能与facebook,gmail和其他类似网站完全相同。

我想到的一种方法是在登录后找到一种控制浏览器后退按钮的方法,因此如果单击它,则将用户重定向到相同的登录页面。 我做了很多研究,但似乎没有什么对我有用。

任何人都会非常感激。在此先感谢。

3 个答案:

答案 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操作过滤器以阻止浏览器缓存它,那么如果用户通过后退按钮返回它,浏览器将请求一个新的登录页面,控制器操作代码可以检测到用户已经过身份验证,并将其重定向到其他页面。

相关问题