Window: sessionStorage 属性

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

只读的 sessionStorage 属性会访问当前 的会话 Storage 对象。sessionStoragelocalStorage 类似;不同之处在于,localStorage 仅按源进行分区,而 sessionStorage 则按源和浏览器选项卡(顶级浏览上下文)进行分区。sessionStorage 中的数据仅在页面会话期间保留。

  • 每当在浏览器中的特定选项卡中加载文档时,就会创建一个唯一的页面会话并分配给该特定选项卡。该页面会话只能在该特定选项卡中访问。主文档和所有嵌入的 浏览上下文(iframe)会按其源进行分组,并且每个源都可以访问其自己的独立存储区域。
  • 如果页面有 openersessionStorage 最初是打开它的 sessionStorage 对象的副本。但是,它们仍然是独立的,一个的更改不会影响另一个。要防止 sessionStorage 被复制,请使用可移除 opener 的技术之一(请参阅 Window.opener)。
  • 页面会话在选项卡或浏览器打开期间持续存在,并且在页面重新加载和恢复时会得到保留。
  • 在新选项卡或窗口中打开页面会创建一个新的会话,其值与顶级浏览上下文的值相同,这与会话 cookie 的工作方式不同。
  • 关闭选项卡/窗口将结束会话并清除 sessionStorage 中的数据。

一个 Storage 对象,可用于访问当前源的会话存储空间。

异常

SecurityError

在以下情况之一中抛出

  • 源不是 有效的 scheme/host/port 组合。例如,如果源使用 file:data: scheme,则可能发生这种情况。
  • 请求违反了策略决定。例如,用户已将浏览器配置为阻止页面持久化数据。

请注意,如果用户阻止 cookie,浏览器可能会将其解释为阻止页面持久化数据的指令。

示例

基本用法

js
// Save data to sessionStorage
sessionStorage.setItem("key", "value");

// Get saved data from sessionStorage
let data = sessionStorage.getItem("key");

// Remove saved data from sessionStorage
sessionStorage.removeItem("key");

// Remove all saved data from sessionStorage
sessionStorage.clear();

刷新之间保存文本

以下示例会自动保存文本字段的内容,并在浏览器刷新时恢复文本字段内容,以免丢失任何输入。

js
// Get the text field that we're going to track
let field = document.getElementById("field");

// See if we have an autosave value
// (this will only happen if the page is accidentally refreshed)
if (sessionStorage.getItem("autosave")) {
  // Restore the contents of the text field
  field.value = sessionStorage.getItem("autosave");
}

// Listen for changes in the text field
field.addEventListener("change", () => {
  // And save the results into the session storage object
  sessionStorage.setItem("autosave", field.value);
});

注意: 有关完整示例,请参阅 使用 Web Storage API 文章。

规范

规范
HTML
# dom-sessionstorage-dev

浏览器兼容性

另见