【问题标题】:How can I clear browser cache (memory / disk cache) after logout?注销后如何清除浏览器缓存(内存/磁盘缓存)?
【发布时间】:2021-03-17 10:33:21
【问题描述】:

我使用asp net core mvc + js。我的一种页面有缓存。

[ResponseCache(Location = ResponseCacheLocation.Client, Duration = 60)]
public async Task<IActionResult> StaticContent(string path)
{
    // code
}

用户在此页面上注销时遇到问题。用户在注销后看到他的帐户,因为页面被缓存。如果刷新页面缓存清除并且用户看不到帐户。

我在 js 上尝试 location.reload(); 注销时单击但重新加载工作早于服务器上的注销工作。我尝试更改 Vary 标头,但我更改了仅在注销后重定向的 Vary 页面

注销后如何清除缓存?有什么想法吗?

【问题讨论】:

  • “用户看到他的帐户” - 问题是什么?即使在注销后也是他的帐户。
  • @Andreas 用户已退出其帐户,但可以看到
  • 为什么不将此页面从缓存中排除?
  • @Adlorem 因为这不是一页而是很多页
  • 我发现这个奇怪的如果刷新页面缓存清除并且用户看不到帐户 - 如果它被缓存(而不取决于登录状态),它只会在到期时被清除。所以刷新页面不会清除缓存,除非它是在到期后立即完成的。因此,请重试您的步骤并确认这一事实。如果它仍然存在,则必须有一些东西从服务器端清除缓存,例如在您的中间件中......很难说。

标签: javascript asp.net-mvc asp.net-core browser-cache


【解决方案1】:

正如King King所说,如果启用客户端缓存,则无法在服务器端告诉客户端。唯一的方法就是告诉 CX 清除缓存。由于一旦浏览器遵守了您在此处发送的缓存规则,您将不得不撤回缓存规则的唯一机会是下次浏览器请求该页面时。

通常,如果您希望动态页面保持动态,则不应尝试设置客户端缓存。

【讨论】:

    【解决方案2】:

    我在微软网站https://docs.microsoft.com/en-us/aspnet/core/performance/caching/response?view=aspnetcore-5.0#responsecache-attribute找到答案 他们说不要缓存使用用户信息的内容。

    我在没有帐户信息的情况下缓存页面的各个部分。 我用

    <cache expires-after="" />
    

    谢谢大家

    【讨论】:

      【解决方案3】:

      在您的注销帖子中,您可以清除可能解决您问题的会话。

      HttpContext.Session.Clear(); //this will clear all session 
      HttpContext.Session.Remove("sessionName"); //this will clear a specific session
      

      【讨论】:

        猜你喜欢
        • 2018-01-11
        • 1970-01-01
        • 2012-07-15
        • 1970-01-01
        • 2022-12-20
        • 1970-01-01
        • 2010-11-02
        • 1970-01-01
        • 2020-11-19
        相关资源
        最近更新 更多