1

当用户在注销后点击返回按钮时,他们会得到文档过期。但是,当用户单击此消息时

单击重试以从网站重新请求文档,

在浏览器中,他们能够再次访问经过身份验证的页面。

4

2 回答 2

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();
}

如果您的大部分站点都是安全的,您还可以注释您的整个控制器或全局注册。

于 2013-02-09T00:18:34.667 回答
1

对于 GET 请求,您希望他们仍能在“返回”上看到经过身份验证的页面,但无法与之交互(假设您使用 POST 进行操作)。

由于您正在谈论一个 POST 请求(因为它给了您过期的消息),您可能缺少[Authorize]控制器/操作中的属性,这将允许任何未经身份验证的用户访问它,您检查过吗?

于 2013-02-08T23:37:17.383 回答