HTML5의 DOM 스토리지의 일부로 localStorage에 저장된 데이터는 얼마 동안 사용할 수 있습니까? localStorage에 넣은 데이터의 만료 시간을 설정할 수 있습니까?
답변
만료를 지정할 수 없습니다. 그것은 전적으로 사용자에게 달려 있습니다.
https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
물론, 애플리케이션이 클라이언트에 저장 한 항목이 나중에 없을 수도 있습니다. 사용자는 명시 적으로 로컬 스토리지를 제거하거나 브라우저가 공간을 고려할 수 있습니다. 방어 적으로 프로그램하는 것이 좋습니다. 그러나 일반적으로 사물은 그 단어의 실제 정의에 따라 “영원히”남아 있습니다.
편집 -분명히 자신의 응용 프로그램이 너무 오래되었다고 판단되면 적극적으로 물건을 제거 할 수 있습니다. 즉, 저장 한 내용에 일정 종류의 타임 스탬프를 명시 적으로 포함한 다음 나중에이를 사용하여 정보를 플러시할지 여부를 결정할 수 있습니다.
답변
localStorage에 저장된 객체에 타임 스탬프를 저장하는 것이 좋습니다.
var object = {value: "value", timestamp: new Date().getTime()}
localStorage.setItem("key", JSON.stringify(object));
개체를 구문 분석하고 타임 스탬프를 가져 와서 현재 날짜와 비교 한 다음 필요한 경우 개체 값을 업데이트 할 수 있습니다.
var object = JSON.parse(localStorage.getItem("key")),
dateString = object.timestamp,
now = new Date().getTime().toString();
compareTime(dateString, now); //to implement
답변
lscache 를 사용할 수 있습니다 . 스토리지 크기가 제한을 초과하는 인스턴스를 포함하여이를 자동으로 처리합니다. 이 경우 지정된 만료에 가장 가까운 항목을 제거하기 시작합니다.
에서 readme
:
lscache.set
Stores the value in localStorage. Expires after specified number of minutes.
Arguments
key (string)
value (Object|string)
time (number: optional)
이것이 일반적인 저장 방법의 유일한 차이점입니다. 가져 오기, 제거 등이 동일하게 작동합니다.
많은 기능이 필요하지 않으면 JSON을 통해 값으로 타임 스탬프를 저장하고 만료 여부를 확인할 수 있습니다.
주목할만한 것은 로컬 저장소가 사용자에게 맡겨진 이유가 있습니다. 그러나 lscache와 같은 것은 매우 임시적인 데이터를 저장해야 할 때 편리합니다.
답변
Brynner Ferreira는 만료 정보가있는 형제 키를 저장하는 것이 좋습니다. 이 방법 으로 키가 많거나 값이 큰 Json 객체 인 경우 타임 스탬프에 액세스하기 위해 키를 구문 분석 할 필요가 없습니다.
다음은 개선 된 버전을 따릅니다.
/* removeStorage: removes a key from localStorage and its sibling expiracy key
params:
key <string> : localStorage key to remove
returns:
<boolean> : telling if operation succeeded
*/
function removeStorage(name) {
try {
localStorage.removeItem(name);
localStorage.removeItem(name + '_expiresIn');
} catch(e) {
console.log('removeStorage: Error removing key ['+ key + '] from localStorage: ' + JSON.stringify(e) );
return false;
}
return true;
}
/* getStorage: retrieves a key from localStorage previously set with setStorage().
params:
key <string> : localStorage key
returns:
<string> : value of localStorage key
null : in case of expired key or failure
*/
function getStorage(key) {
var now = Date.now(); //epoch time, lets deal only with integer
// set expiration for storage
var expiresIn = localStorage.getItem(key+'_expiresIn');
if (expiresIn===undefined || expiresIn===null) { expiresIn = 0; }
if (expiresIn < now) {// Expired
removeStorage(key);
return null;
} else {
try {
var value = localStorage.getItem(key);
return value;
} catch(e) {
console.log('getStorage: Error reading key ['+ key + '] from localStorage: ' + JSON.stringify(e) );
return null;
}
}
}
/* setStorage: writes a key into localStorage setting a expire time
params:
key <string> : localStorage key
value <string> : localStorage value
expires <number> : number of seconds from now to expire the key
returns:
<boolean> : telling if operation succeeded
*/
function setStorage(key, value, expires) {
if (expires===undefined || expires===null) {
expires = (24*60*60); // default: seconds for 1 day
} else {
expires = Math.abs(expires); //make sure it's positive
}
var now = Date.now(); //millisecs since epoch time, lets deal only with integer
var schedule = now + expires*1000;
try {
localStorage.setItem(key, value);
localStorage.setItem(key + '_expiresIn', schedule);
} catch(e) {
console.log('setStorage: Error setting key ['+ key + '] in localStorage: ' + JSON.stringify(e) );
return false;
}
return true;
}
답변
로컬 저장소는 만료 메커니즘을 제공하지 않지만 쿠키는 제공합니다. 로컬 스토리지 키를 쿠키와 간단히 연결하면 로컬 스토리지를 쿠키와 동일한 만료 매개 변수로 업데이트 할 수 있습니다.
jQuery의 예 :
if (!$.cookie('your_key') || !localStorage.getItem('your_key')) {
//get your_data from server, then...
localStorage.setItem('your_key', 'your_data' );
$.cookie('your_key', 1);
} else {
var your_data = localStorage.getItem('your_key');
}
// do stuff with your_data
이 예제는 브라우저를 닫을 때 기본 매개 변수를 가진 쿠키가 만료되도록 설정합니다. 따라서 브라우저를 닫았다가 다시 열면 your_data의 로컬 데이터 저장소가 서버 측 호출로 새로 고쳐집니다.
이는 로컬 데이터 저장소 를 제거 하는 것과 정확히 동일하지 않으며 대신 쿠키가 만료 될 때마다 로컬 데이터 저장소를 업데이트합니다. 그러나 4K 이상의 클라이언트 측 (쿠키 크기 제한)을 저장하는 것이 주요 목표라면 쿠키와 로컬 스토리지의이 쌍을 사용하면 쿠키와 동일한 만료 매개 변수를 사용하여 더 큰 스토리지 크기를 달성 할 수 있습니다. .
답변
sessionStorage 를 사용하는 것이 좋습니다.
- localStorage 와 동일 하지만 세션이 파괴되거나 브라우저가 닫히면 파괴됩니다.
- 또한 localStorage 는 탭간에 공유 할 수 있지만 sessionStorage 는 현재 탭에서만 사용할 수 있지만 새로 고침 페이지에서 값이 변경되거나 페이지가 변경되지는 않습니다.
- sessionStorage는 쿠키에 대한 네트워크 트래픽을 줄이는데도 유용합니다
설정 값 사용
sessionStorage.setItem("key","my value");
가치 사용을 위해
var value = sessionStorage.getItem("key");
세트의 모든 방법은
sessionStorage.key = "my val";
sessionStorage["key"] = "my val";
sessionStorage.setItem("key","my value");
얻을 수있는 모든 방법은
var value = sessionStorage.key;
var value = sessionStorage["key"];
var value = sessionStorage.getItem("key");
답변
수명주기는 응용 프로그램 / 사용자에 의해 제어됩니다.
로부터 표준 :
사용자 에이전트는 보안상의 이유로 또는 사용자가 요청한 경우에만 로컬 스토리지 영역에서 데이터를 만료해야합니다. 사용자 에이전트는 해당 데이터에 액세스 할 수있는 스크립트가 실행되는 동안 항상 데이터를 삭제하지 않아야합니다.