MVC 4:注销和浏览器的“后退”功能

时间:2013-06-05 07:53:42

标签: asp.net asp.net-mvc

当用户点击“注销”时,会成功调用以下(标准)操作:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult LogOff()
    {
        WebSecurity.Logout();

        return RedirectToAction("Login", "Account");
    }

用户被重定向到登录页面。

但是,当在浏览器中单击“返回”时,用户仍然可以看到他/她仍然登录的最后一页。如果他/她然后尝试执行操作,则用户成功重定向到登录页面,因为他不再被授权。

有什么方法可以通过点击浏览器中的“返回”来阻止已注销的用户查看授权的内容吗?我的每个控制器都有[授权]属性。感谢您的投入!

3 个答案:

答案 0 :(得分:2)

实际上,不,因为他们所看到的是浏览器中页面的缓存版本。我想,你可以尝试使用JavaScript来捕获后导航事件,但我倾向于发现这种做法非常烦人,而且并不是那么难以规避。

正如您所说,当用户尝试执行任何操作时,他们会被迫再次进行身份验证,因此他们确实没有看到任何他们尚未知晓的反向导航,所以真正的问题是如果有理由花时间来解决可能不是问题的问题。

答案 1 :(得分:1)

是的,你可以这样做

您需要根据需要在母版页或.aspx页面中添加一个小的javascript函数。

<script type="text/javascript">
    window.history.forward();
    function noBack() { window.history.forward(); }
</script>

并在页面正文中添加

 <body onload="noBack();" onpageshow="if (event.persisted) noBack();" onunload="">

如果用户按下页面上的“返回”按钮,他将被发送到当前页面。因为history.forward代码将用户推回到当前页面。因此用户将无法返回。

希望它会有所帮助。

答案 2 :(得分:0)

如果您正在使用表单身份验证,那么以下内容就是您的答案。

Logout issue with browser back button