HTML Web Storage API
HTML Web Storage API;比 cookie 更好。
什么是 HTML Web Storage?
使用 Web Storage,应用程序可以在用户的浏览器本地存储数据。
在 HTML5 之前,应用程序数据必须存储在 cookie 中,并包含在每个服务器请求中。Web Storage 更安全,并且可以在本地存储大量数据,而不会影响网站性能。
与 cookie 不同,存储限制要大得多(至少 5MB),并且信息永远不会传输到服务器。
Web Storage 是基于源(域名和协议)的。来自同一源的所有页面都可以存储和访问相同的数据。
Web Storage API 对象
Web Storage 提供两个对象用于在浏览器中存储数据:
window.localStorage- 存储没有过期日期的数据(浏览器标签页关闭时数据不会丢失)window.sessionStorage- 存储一个会话的数据(浏览器标签页关闭时数据会丢失)
浏览器支持
表格中的数字指定了完全支持 Web Storage 的第一个浏览器版本。
| API | Chrome | Edge | Firefox | Safari | Opera |
|---|---|---|---|---|---|
localStorage |
4.0 | 8.0 | 3.5 | 4.0 | 11.5 |
sessionStorage |
4.0 | 8.0 | 3.5 | 4.0 | 11.5 |
测试 Web Storage API 支持
在使用 Web Storage 之前,我们可以快速检查浏览器对 localStorage 和 sessionStorage 的支持:
实例
测试浏览器支持:
<script>
const x = document.getElementById("result");
if (typeof(Storage) !== "undefined") {
x.innerHTML = "Your browser supports Web storage!";
} else {
x.innerHTML = "抱歉,不支持 Web Storage!";
}
</script>
localStorage 对象
localStorage 对象存储没有过期日期的数据。浏览器关闭时数据不会丢失,并且在第二天、下周或明年仍然可用。
实例
使用 localStorage 设置和检索名称/值对:
<script>
const x = document.getElementById("result");
if (typeof(Storage) !== "undefined") {
// 存储
localStorage.setItem("lastname", "Smith");
localStorage.setItem("bgcolor", "yellow");
// 检索
x.innerHTML = localStorage.getItem("lastname");
x.style.backgroundColor = localStorage.getItem("bgcolor");
} else {
x.innerHTML = "抱歉,不支持 Web Storage!";
}
</script>
示例解释:
- 使用
localStorage.setItem()方法创建名称/值对 - 使用
localStorage.getItem()方法检索设置的值 - 检索
"lastname"的值并将其插入到id="result"的元素中 - 检索
"bgcolor"的值并将其插入到id="result"元素的样式backgroundColor中
删除 "lastname" localStorage 项的语法如下:
localStorage.removeItem("lastname");
注意:名称/值对始终以字符串形式存储。记住在需要时将它们转换为其他格式!
使用 localStorage 计数点击次数
下面的例子计算用户点击按钮的次数。在这段代码中,值字符串被转换为数字,以便能够增加计数器:
实例
<script>
function clickCounter() {
const x = document.getElementById("result");
if (typeof(Storage) !== "undefined") {
if (localStorage.clickcount) {
localStorage.clickcount = Number(localStorage.clickcount)+1;
} else {
localStorage.clickcount = 1;
}
x.innerHTML = "您已点击按钮 " + localStorage.clickcount + " 次!";
} else {
x.innerHTML = "抱歉,不支持 Web Storage!";
}
}
</script>
sessionStorage 对象
sessionStorage 对象与 localStorage 对象相同,只是它仅存储一个会话的数据!当用户关闭特定的浏览器标签页时,数据会被删除。
下面的例子计算用户在当前会话中点击按钮的次数:
实例
<script>
function clickCounter() {
const x = document.getElementById("result");
if (typeof(Storage) !== "undefined") {
if (sessionStorage.clickcount) {
sessionStorage.clickcount = Number(sessionStorage.clickcount)+1;
} else {
sessionStorage.clickcount = 1;
}
x.innerHTML = "您在此会话中已点击按钮 " + sessionStorage.clickcount + " 次!";
} else {
x.innerHTML = "抱歉,不支持 Web Storage!";
}
}
</script>