2013-02-08 80 views
1

当用户在注销后点击返回按钮时,它们将获得文档已过期。但是,当用户点击这个消息退出按钮可让您在注销后返回到已验证页面

点击再次尝试从网站重新申请文件,浏览器

,他们能够再次访问身份验证的页面。

+1

可能的重复http://stackoverflow.com/questions/1951784/logout-from-mvc – hatchet 2013-02-08 23:38:32

回答

1

对于GET请求,您希望他们仍然可以在“后退”中看到经过身份验证的页面,但无法与其交互(假设您使用POST进行操作)。

由于您正在讨论POST请求(因为它提供了过期的消息),因此您可能会遗漏控制器/操作中的[Authorize]属性,这将允许任何未经身份验证的用户访问它,你检查过了吗?

+0

我正在使用帖子。当用户注销时,我看到“文档已过期”,这是想要的结果。当你点击FF中的“try again”按钮时,它会在控制器中重新发送这些值(我可以在调试模式下看到),因此用户再次进行身份验证。即使用户再次点击TRY,它也不应该路由到已认证的页面。 – Niv 2013-02-08 23:44:47

2

这是因为页面被缓存。对于所有安全请求,您需要手动清除缓存。你可以做这样的事情:

public class SecurePageAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1)); 
     filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     filterContext.HttpContext.Response.Cache.SetNoStore(); 
    } 
} 

你会然后用它在你的控制器像这样:

[SecurePage] 
public ActionResult Index() { 
    return View(); 
} 

你也可以注释整个控制器或注册此全局如果大多数网站是安全。

相关问题