[javascript] HTML5 로컬 저장소의 항목은 언제 만료됩니까?

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");

API를 보려면 여기를 클릭하십시오

세트의 모든 방법은

  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");


답변

수명주기는 응용 프로그램 / 사용자에 의해 제어됩니다.

로부터 표준 :

사용자 에이전트는 보안상의 이유로 또는 사용자가 요청한 경우에만 로컬 스토리지 영역에서 데이터를 만료해야합니다. 사용자 에이전트는 해당 데이터에 액세스 할 수있는 스크립트가 실행되는 동안 항상 데이터를 삭제하지 않아야합니다.