【问题标题】:Clearing service worker cache if user deletes cookies manually如果用户手动删除 cookie,则清除 service worker 缓存
【发布时间】:2019-09-11 02:34:03
【问题描述】:

我目前正在使用 Workbox 通过 Service Worker 完成一些缓存。现在,当用户注销时,我面临着从缓存中删除更多个性化数据的问题。我们已经通过在注销操作时向 SW 发布消息来实现这一点。但是,我在处理用户删除 cookie 的边缘情况时遇到了麻烦。由于我们如何进行身份验证,用户在 cookie 删除时会被注销。但我们无法检测到此删除,因此无法清除缓存。

关于如何处理边缘情况或更好地处理 SW/Workbox 中经过身份验证的资产的任何建议?谢谢!

下面是我们当前流程的一个简短示例。

* sw.js */
self.addEventListener("message", msg => {
  if (msg.type) {
    switch (msg.event) {
      case "LOGOUT":
        // delete caches which contain personalized data
        Promise.all(
          exprPlugins.map(plugin =>
            plugin.deleteCacheAndMetadata(),
          ),
        )
        // ... other code
        break;
    }
  }
});

【问题讨论】:

  • 理想情况下,您不应将任何 PII 信息存储在缓存中。

标签: service-worker workbox service-worker-events


【解决方案1】:

我猜你可能会以一种过于 SW 的方式来思考这个问题 :-)

伪代码:

// Page loads / timer fires every one minute
// if (no cookie found) 
//  -- send logout msg to sw
// else 
//  -- send "the user logged in is *id from cookie*" kinda event
//  -- sw checks the data matches whoever is now logged in and if needed purges the cache

请注意,由于这不是手动删除 cookie 后的自动事件,因此恶意用户可以打开开发工具并查看前一个用户的数据。因此,这不安全,它更像是一种半开玩笑的解决方法。

正如其他人指出的那样,您可能不应该将任何关键的 PII 信息缓存到缓存中。

【讨论】:

  • 嘿@pate,谢谢你的提示!但是,这种持续的轮询会不会很昂贵?还是在这种情况下我应该做类似指数退避的事情?
  • 乐于助人 :-) 不,那根本不会贵。我指的是每 60 秒左右的 setInterval 或递归 setTimeout 之类的东西。另一种可能性,甚至更好,是在每个页面加载时检查 cookie 状态。您也可以在每次标签集中时检查它。但是再一次,不要在里面放任何敏感的东西。
猜你喜欢
  • 2019-08-30
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
  • 2020-07-01
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多