localstorang怎么设置过期时间

admin2023-12-28 23:13:28

LocalStorage 本身并不支持设置过期时间。它是一种在客户端存储数据且没有到期时间的机制,存储的数据会一直存在,除非用户清除浏览器的数据或者通过代码进行删除。

如果你想要为LocalStorage中的数据设置类似于cookie的过期时间,你需要自己实现这一机制。以下是一个简单的示例,展示了如何在设置时添加一个时间戳,并在获取数据时检查该时间戳:

// 设置带有过期时间的数据到LocalStorage
function setItemWithExpiry(key, value, ttl) {
    const now = new Date();
    // ttl (time to live) 以毫秒为单位
    const item = {
        value: value,
        expiry: now.getTime() + ttl,
    };
    localStorage.setItem(key, JSON.stringify(item));
}
// 获取LocalStorage数据,并检查是否过期
function getItemWithExpiry(key) {
    const itemStr = localStorage.getItem(key);
    // 如果没有找到对应的项,则直接返回null
    if (!itemStr) {
        return null;
    }
    const item = JSON.parse(itemStr);
    const now = new Date();
    // 比较当前时间和设置的过期时间
    if (now.getTime() > item.expiry) {
        // 如果时间已经过期,则删除存储项,并返回null
        localStorage.removeItem(key);
        return null;
    }
    return item.value;
}
// 示例: 设置一个带有5分钟过期的数据项
setItemWithExpiry('myKey', 'myValue', 300000);
// 获取数据
const myValue = getItemWithExpiry('myKey');
if (myValue) {
    console.log('获取到值:', myValue);
} else {
    console.log('值已过期或不存在.');
}

在这个示例中,setItemWithExpiry 函数接收三个参数:键(key)、值(value)以及存活时间(ttl,指定毫秒数)。存活时间是指从现在开始到数据应该被认为是过期的毫秒数。

getItemWithExpiry 函数尝试检索给定键的值。如果该值不存在或者已经过期,则返回null。

这样,尽管LocalStorage本身不支持过期时间,你也可以通过应用层的代码逻辑来实现此功能。