Когда истекает срок действия элементов в локальном хранилище HTML5? - PullRequest
293 голосов
/ 24 февраля 2010

Как долго доступны данные, хранящиеся в localStorage (как часть DOM Storage в HTML5)? Могу ли я установить срок действия данных, которые я помещаю в localStorage?

Ответы [ 15 ]

3 голосов
/ 16 июня 2016

Если кто-то использует плагин jStorage из jQuery, его можно добавить с помощью функции setTTL, если плагин jStorage

$.jStorage.set('myLocalVar', "some value");
$.jStorage.setTTL("myLocalVar", 24*60*60*1000); // 24 Hr.
1 голос
/ 07 марта 2016

В интересах искателей:

Как и Фернандо, я не хотел добавлять загрузку json, когда сохраненные значения были простыми. Мне просто нужно было отслеживать взаимодействие с пользовательским интерфейсом и поддерживать актуальность данных (например, как пользователь использовал сайт электронной торговли перед проверкой).

Это не будет соответствовать всем критериям, но, мы надеемся, будет быстрым копированием + началом вставки для кого-то и сохранит добавление еще одной библиотеки.

ПРИМЕЧАНИЕ: это не будет хорошо, если вам нужно получить элементы по отдельности.

// Addition
if(window.localStorage){
    localStorage.setItem('myapp-' + new Date().getTime(), 'my value');
}

// Removal of all expired items
if(window.localStorage){

    // two mins - (1000 * 60 * 20) would be 20 mins
    var expiryTime = new Date().getTime() - (1000 * 60 * 2);

    var deleteRows = [];
    for(var i=0; i < localStorage.length; i++){
        var key = localStorage.key(i);
        var partsArray = key.split('-');
        // The last value will be a timestamp
        var lastRow = partsArray[partsArray.length - 1];

        if(lastRow && parseInt(lastRow) < expiryTime){
            deleteRows.push(key);
        }
    }
    // delete old data
    for(var j=0; j < deleteRows.length; j++){
        localStorage.removeItem(deleteRows[j]);
    }
}
1 голос
/ 08 марта 2015
Подход

@ sebarmeli является лучшим, на мой взгляд, но если вы хотите, чтобы данные сохранялись только на протяжении сеанса, тогда, вероятно, лучше использовать sessionStorage:

Это глобальный объект (sessionStorage), который поддерживает область хранения это доступно на время сеанса страницы. Сеанс страницы длится до тех пор, пока браузер открыт и сохраняется на странице перезагружает и восстанавливает. Открытие страницы в новой вкладке или окне приведет к новый сеанс, который будет инициирован.

MDN: sessionStorage

1 голос
/ 17 февраля 2014

Обход с использованием угловых и локальных кормов:

angular.module('app').service('cacheService', function() {

  return {
    set: function(key, value, expireTimeInSeconds) {
      return localforage.setItem(key, {
        data: value,
        timestamp: new Date().getTime(),
        expireTimeInMilliseconds: expireTimeInSeconds * 1000
      })
    },
    get: function(key) {
      return localforage.getItem(key).then(function(item) {
        if(!item || new Date().getTime() > (item.timestamp + item.expireTimeInMilliseconds)) {
          return null
        } else {
          return item.data
        }
      })
    }
  }

})
0 голосов
/ 08 мая 2019

Вы можете попробовать это.

var hours = 24; // Reset when storage is more than 24hours
var now = new Date().getTime();
var setupTime = localStorage.getItem('setupTime');
if (setupTime == null) {
     localStorage.setItem('setupTime', now)
} else {
    if(now-setupTime > hours*60*60*1000) {
         localStorage.clear()
         localStorage.setItem('setupTime', now);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...