Chrome清理会话一段时间后的存储

lp0sw83n  于 2023-08-01  发布在  Go
关注(0)|答案(1)|浏览(117)

应用程序启动后,我在sessionStorage中设置了一些变量,但过了一段时间,sessionStorage被清理了。在3个不同的环境中测试。在3个不同的应用程序和静态服务器上测试。在Windows和MacOS上测试。已在Chrome、Mozilla、Safari、Chromium和Edge中测试(仅在Chrome中重现)。
例如,其中一个Chrome版本的问题是可重现的:
版本114.0.5735.198(Official Build)(arm 64)
下面是代码复制:

<!DOCTYPE html>
<html lang="en">

<script>

  sessionStorage.setItem('TEST', 'TEST value')
  setTimeout(() => { console.log('100ms', sessionStorage.getItem('TEST')) }, 100)
  setTimeout(() => { console.log('200ms', sessionStorage.getItem('TEST')) }, 200)
  setTimeout(() => { console.log('300ms', sessionStorage.getItem('TEST')) }, 300)
  setTimeout(() => { console.log('500ms', sessionStorage.getItem('TEST')) }, 500)
  setTimeout(() => { console.log('1000ms', sessionStorage.getItem('TEST')) }, 1000)
  setTimeout(() => { console.log('2000ms', sessionStorage.getItem('TEST')) }, 2000)
  setTimeout(() => { console.log('3000ms', sessionStorage.getItem('TEST')) }, 3000)

</script>

<body>
<h1>Welcome to My Website</h1>
</body>
</html>

字符串
但是复制的步骤有点棘手。它只能在某些应用服务器或静态服务器上重现。例如http-server
1.打开隐身Chrome窗口。
1.打开新选项卡
1.插入服务器的URL
1.打开开发工具并检查日志(您需要重复步骤2-4多达5-10次以捕获问题)
注意:在打开URL之前不要打开dev-tool。在这种情况下,它不会被复制。
x1c 0d1x的数据
我不明白这个问题怎么会存在。这是浏览器的基本功能中的一个错误。例如,在我的案例中,它阻止了一个大型商业应用程序。
问:有人见过吗?你有什么变通办法吗?任何信息都会有帮助。我想知道为什么我找不到关于这个案子的任何公开问题或问题。

i34xakig

i34xakig1#

NPMJS包http-server该高速缓存时间为3600秒,这意味着一个小时,在某些情况下,例如如果存在延迟问题,当重新加载和缓冲实时服务器正在渲染的数据时,会话存储在浏览器中的实时服务器选项卡中的存储数据可能会从新的缓存周期中丢失,或者只是在一般情况下丢失/忽略/忽略。
您可以做的是将sessionStorage存储在一个变量中,方法是在设置项时声明一个变量,如let storage_one = sessionStorage.setItem('TEST', 'TEST_VALUE');
这可能有助于提醒实时服务器保留sessionStorage并且不要被忽略,或者您可以简单地通过抓取其值来创建一个具有sessionStorage值的变量,这似乎是更好的选择,因为如果sessionStorage丢失,那么您无法使用仅设置其值的变量做任何事情,但是使用this选项,你可以很容易地调用变量的值,然后就可以了。它还允许更简单的代码,let storage_one = sessionStorage.getItem('TEST', 'TEST_VALUE');
我希望这对你有帮助:)

P.S. - Stackoverflow不会允许您运行此代码,但我向您保证这是可行的。

<!DOCTYPE html>
<html lang="en">

<script>

  sessionStorage.setItem('TEST', 'TEST value');
  let teststorageval = sessionStorage.getItem('TEST');
  setTimeout(() => { console.log('100ms',teststorageval); }, 100);
  setTimeout(() => { console.log('200ms', teststorageval); }, 200);
  setTimeout(() => { console.log('300ms', teststorageval); }, 300);
  setTimeout(() => { console.log('500ms', teststorageval); }, 500);
  setTimeout(() => { console.log('1000ms', teststorageval); }, 1000);
  setTimeout(() => { console.log('2000ms', teststorageval); }, 2000);
  setTimeout(() => { console.log('3000ms', teststorageval); }, 3000);

</script>

<body>
<h1>Welcome to My Website</h1>
</body>
</html>

字符串

相关问题