【问题标题】:How to clear MVC 3 routing parameters on log out如何在注销时清除 MVC 3 路由参数
【发布时间】:2012-05-27 11:17:19
【问题描述】:

我有一个使用 razor 的 ASP.net MVC 3 应用程序,当使用默认 AccountController 注销当前用户时,我发现了一个安全问题。单击注销(_LogoutPartial 视图)后,我被重定向到登录页面。很好,但是当我在浏览器上单击返回时,它允许我返回 Web 应用程序并且不会要求我登录。

带参数的路由如下:

routes.MapRoute(
                "Person", // Route name
                "Person/{profileName}/{action}/{id}", // URL with parameters
                new { controller = "Person", action = "Index", id = UrlParameter.Optional } // defaults
            );
//example http://localhost:1946/Person/JoeBlack/ListTeamMembers

似乎 {profileName} 在会话中仍处于活动状态 (?) 并允许调用控制器。但是控制器操作 {ListTeamMembers} 具有 [Authorize()] 属性,所以我不确定它是如何让用户进入的......

【问题讨论】:

  • 不,他们只是从缓存中看到页面。或者您没有正确注销它们。
  • 谢谢安德鲁。这是否意味着我需要检查每个 Action 方法,检查是否存在活动的用户会话,如果没有,则重定向到登录?
  • 这就是 Authorize 属性的作用。问题是浏览器在按下 [返回] 后根本不会尝试再次加载页面,它只是向他们显示缓存。对受保护的控制器操作不实施缓存策略会有所帮助。

标签: asp.net asp.net-mvc-3 routes logout


【解决方案1】:

当您按下浏览器上的“返回”按钮时,将从浏览器的缓存中检索最后一页。服务器永远不会被击中。用户不再经过身份验证。这意味着如果他尝试执行某些操作并发送 HTTP 请求,他将被重定向到登录页面。防止这种情况发生的方法是从客户端浏览器缓存中排除所有经过身份验证的页面。您可以为这份工作申请 custom NoCache action filter

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-05
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2011-05-10
    • 1970-01-01
    • 2014-03-11
    相关资源
    最近更新 更多