Как долго доступны данные, хранящиеся в localStorage (как часть DOM Storage в HTML5)? Могу ли я установить срок действия данных, которые я помещаю в localStorage?
javascript
html
local-storage
user280427
источник
источник
Ответы:
Не возможно указать срок действия. Это полностью зависит от пользователя.
https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
Конечно, возможно, что что-то, что ваше приложение хранит на клиенте, может не появиться позже. Пользователь может явно избавиться от локального хранилища, или браузер может столкнуться с соображениями пространства. Хорошо программировать в обороне. Как правило, однако, вещи остаются «навсегда», основываясь на некотором практическом определении этого слова.
редактировать - очевидно, ваше собственное приложение может активно удалять вещи, если решит, что оно слишком старое. То есть вы можете явно включить какую-то метку времени в то, что вы сохранили, а затем использовать ее позже, чтобы решить, следует ли сбрасывать информацию.
источник
Я бы предложил хранить метку времени в объекте, который вы храните в localStorage
Вы можете проанализировать объект, получить метку времени и сравнить с текущей датой, а при необходимости обновить значение объекта.
источник
settimout
для каждых 5 секунд) или для каждого запроса, который клиент отправляет на сервер?Вы можете использовать lscache . Он обрабатывает это автоматически, включая случаи, когда размер хранилища превышает лимит. Если это произойдет, он начинает обрезку предметов, наиболее близких к указанному сроку годности.
Из
readme
:Это единственная реальная разница между обычными методами хранения. Получить, удалить и т. Д. Работают так же.
Если вам не нужна такая большая функциональность, вы можете просто сохранить отметку времени со значением (через JSON) и проверить его на срок действия.
Следует отметить, что есть веская причина, по которой локальное хранилище остается за пользователем. Но такие вещи, как lscache, могут пригодиться, когда вам нужно хранить чрезвычайно временные данные.
источник
Brynner Ferreira принесла хорошую мысль: хранить ключ брата, в котором хранится информация об истечении срока действия. Таким образом, если у вас есть большое количество ключей или если ваши значения являются большими объектами Json , вам не нужно анализировать их для доступа к отметке времени.
здесь следует улучшенная версия:
источник
else
строка не должна бытьexpires = Math.abs(1000*expires); //make sure it's positive
?getStorage
звонка. Если вы попытаетесь получить доступ к_expiresIn
версии ключа напрямую, то ключ становится тем,..._expiresIn_expiresIn
который, конечно, не существует, поэтому он удаляет исходный..._expiresIn
ключ, а затем при следующем обращении к исходному ключу..._expiresIn
не существует, и он удаляет исходный ключ. ключ. Я бы предложил ловушку для этого, когда я столкнулся с этим в одном из моих проектов.if(key.indexOf('_expiresIn') > -1) { return localStorage.getItem(key); }
В то время как локальное хранилище не предоставляет механизм истечения срока действия, куки делают. Простое сопряжение ключа локального хранилища с файлом cookie обеспечивает простой способ гарантировать, что локальное хранилище может быть обновлено с теми же параметрами срока действия, что и файл cookie.
Пример в jQuery:
В этом примере устанавливается cookie с параметром по умолчанию, срок действия которого истекает при закрытии браузера. Таким образом, когда браузер закрывается и повторно открывается, локальное хранилище данных для your_data обновляется с помощью вызова на стороне сервера.
Обратите внимание, что это не то же самое, что удаление локального хранилища данных, вместо этого оно обновляет локальное хранилище данных по истечении срока действия файла cookie. Тем не менее, если ваша основная цель состоит в том, чтобы иметь возможность хранить более 4 КБ на стороне клиента (ограничение по размеру файлов cookie), такое сочетание файлов cookie и локального хранилища поможет вам достичь большего размера хранилища, используя те же параметры срока действия, что и файлы cookie. ,
источник
Нажмите здесь для просмотра API
источник
sessionStorage
не работает обмен данными между вкладкамиЖизненный цикл контролируется приложением / пользователем.
Из стандарта :
источник
Из проекта W3C:
Вы захотите делать свои обновления в вашем расписании, используя setItem (ключ, значение); это либо добавит, либо обновит данный ключ новыми данными.
источник
источник
Если кто-то использует плагин jStorage из jQuery, то его можно добавить с помощью функции setTTL, если плагин jStorage
источник
Если кто-то все еще ищет быстрое решение и не хочет таких зависимостей, как jquery и т.д., я написал мини-библиотеку, которая добавляет срок действия в локальное / сессионное / пользовательское хранилище, вы можете найти его с источником здесь:
https://github.com/RonenNess/ExpiredStorage
источник
Вы можете попробовать это.
источник
Обходной путь с использованием угловых и локальных кормов:
источник
localforage
.expireTimeInMilliseconds
это не какой-тоlocalforage
атрибут, а переменная, которую я использовал для проверки необходимости истечения срока хранения хранимых данных. Проверьтеget
определение функции на моем примере.localforage
- это не легкий маленький класс помощников, которого я ожидалПодход @ sebarmeli, на мой взгляд, лучший, но если вы хотите, чтобы данные сохранялись в течение всего сеанса, то
sessionStorage
, вероятно, это лучший вариант:MDN: sessionStorage
источник
В интересах искателей:
Как и Фернандо, я не хотел добавлять загрузку json, когда сохраненные значения были простыми. Мне просто нужно было отслеживать взаимодействие с пользовательским интерфейсом и поддерживать актуальность данных (например, как пользователь использовал сайт электронной торговли перед проверкой).
Это не будет соответствовать всем критериям, но мы надеемся, что это будет быстрое копирование + вставка для кого-то и сохранение, добавление еще одной библиотеки.
ПРИМЕЧАНИЕ: это не будет хорошо, если вам нужно получить элементы по отдельности.
источник
Если вы знакомы с объектом браузера locaStorage , вы знаете, что не предусмотрено предоставление срока действия. Однако мы можем использовать Javascript, чтобы добавить TTL (время жизни), чтобы сделать недействительными элементы в locaStorage по истечении определенного периода времени.
источник