Javascript에서 SessionStorage 및 LocalStorage를 사용하는 방법

앞말


웹 개발자로서 웹 브라우저에 데이터를 저장하여 사용자 체험을 개선하고 웹 응용 프로그램의 성능을 향상시키는 것은 매우 흔한 일이다.대부분의 경우 LocalStorage와 SessionStorage를 사용할 수 있습니다.
본고는 보안과 사용자 체험 두 가지 측면에서 SessionStorage와 LocalStorage를 평가하고자 합니다.그리고 우리는 당신의 요구에 따라 적합한 사용 대상을 어떻게 선택하는지 토론할 것입니다.

SessionStorage 및 LocalStorage 소개


HTML5 이전에 개발자는 일반적으로 쿠키를 사용하여 클라이언트에 간단한 정보를 저장했다.HTML5가 발표된 후에 새로운 클라이언트가 로컬로 데이터를 저장하는 방법을 제공했다. 그것이 바로 웹 저장소이다. 이것은 LocalStorage와 SessionStorage로 나뉘는데 자바스크립트를 통해 웹 브라우저에서 키 값을 맞추는 형식으로 데이터를 저장할 수 있다.쿠키에 비해 다음과 같은 장점이 있습니다.
  • 더 큰 저장 용량, 쿠키는 4k, 웹 스토리지는 5M..
  • 쿠키보다 조작 데이터가 더 간단하다..
  • 매번 요청에 따라 서버에 전송되지 않습니다..
  • SessionStorage 및 LocalStorage 사용 방법


    브라우저 윈도우 객체를 사용하여 SessionStorage 및 LocalStorage에 액세스할 수 있습니다.다음 예제를 참조하십시오.
    
    sessionStorage = window.sessionStorage
    localStorage = window.localStorage
    다음은 이 두 가지 스토리지 유형에서 사용할 수 있는 기능입니다.
    
    // item
      storage.setItem('name', 'Alice')
      storage.setItem('age', '5')
    // item
      storage.getItem('name') // returns "Alice"
    //get 
      storage.length // returns 2
    // get key 
      storage.key(0) // returns "name"
    // item
      storage.removeItem('name')
    // 
      storage.clear()

    LocalStorage와 SessionStorage의 차이점


    LocalStorage와 SessionStorage 간의 주요 차이점은 브라우저 창과 옵션 카드 사이의 데이터 공유 방식이 다르다는 데 있다.
    LocalStorage는 브라우저 창과 탭 간에 공유할 수 있습니다.즉, 여러 탭과 창에 응용 프로그램이 열려 있고, 탭이나 창에서 LocalStorage가 업데이트되면 다른 모든 탭과 창에서 업데이트된 LocalStorage 데이터를 볼 수 있습니다.
    그러나 SessionStorage 데이터는 다른 탭과 창에 독립적입니다.두 탭이 동시에 열려 있는 경우 그 중 하나가 SessionStorage를 업데이트하면 다른 탭과 창에 반영되지 않습니다.예를 들어 사용자가 두 개의 브라우저 옵션을 통해 두 개의 호텔 방을 예약하고 싶다고 가정한다.이것은 단독 세션 데이터이기 때문에 SessionStorage를 사용하는 것은 호텔 예약 응용 프로그램의 이상적인 선택이다.

    보안 지침


    Web Storage의 저장 대상은 도메인 이름과 독립적이다. 즉, 서로 다른 사이트 아래의 웹 응용 프로그램은 자신의 독립된 저장 대상을 가지고 서로 접근할 수 없다는 점에서 SessionStorage와 LocalStorage는 같다.
    예: abc에 배치합니다.com의 웹 응용 프로그램에서xyz에 접근할 수 없습니다.com의 Web Storage 스토리지 객체입니다.
    www.grapecity에도 불구하고 하위 도메인 이름도 마찬가지입니다.com.cn과 gcdn.grapecity.com.cn은 그레이프시티에 속합니다.com.cn 메인 도메인 아래에 있지만 서로의 저장 대상에 접근할 수 없습니다.
    또한 하위 도메인 이름이 서로 독립적일 뿐만 아니라 http와 https 프로토콜 사용에 대해서도 다르기 때문에 이 점도 주의해야 한다.

    사이트 간 스크립트 공격(XSS) 대응


    우선 XSS 공격은 무엇입니까?
    XSS는 웹 페이지에 악성 스크립트를 추가하여 브라우저를 통해 불러와서 공격을 하고 프라이버시 정보를 얻는 목적을 달성한다.
    LocalStorage와 SessionStorage는 이 점에서 XSS 공격을 받기 쉽다.공격자는 저장소 대상에 악성 스크립트를 직접 추가하여 실행할 수 있습니다.따라서 일부 민감한 개인 정보를 웹 저장소에 저장하는 것은 그다지 권장하지 않는다. 예를 들어
  • 사용자 이름 비밀번호
  • .신용카드 자료
  • JsonWeb 토큰
  • API 키
  • SessionID
  • 어떻게 공격을 피합니까?

  • 같은 도메인 이름으로 여러 웹 응용 프로그램을 배치하지 마십시오. 만약에 이런 장면이 있으면 하위 도메인 이름으로 응용 프로그램을 배치하십시오. 일단 여러 응용 프로그램이 통일된 도메인 이름을 사용하면 모든 사용자에게 웹 저장 대상을 공유할 수 있기 때문입니다
  • 데이터를 LocalStorage에 저장하면 개발자는 사용자가 삭제하기 전에 제어할 수 없습니다.세션이 끝난 후 데이터를 자동으로 삭제하려면 SessionStorage를 사용하십시오..
  • WebStorage에서 읽은 데이터는 모두 검증, 인코딩 및 이스케이프되어야 합니다..
  • WebStorage에 저장하기 전에 데이터를 암호화합니다
  • 사용자 환경 향상


    비록 일부 민감한 데이터는 사용을 피해야 하지만, 우리는 여전히 WebStorage를 통해 웹 응용 프로그램의 사용자 체험을 개선할 수 있다
    예를 들어 사용자가 폼을 작성하고 있지만 일부 이유로 탭/창을 닫았지만 폼 LocalStorage는 사용자 폼을 자동으로 저장하는 기능을 실현하여 사용자가 다시 열면 이전에 작성한 정보가 자동으로 복구됩니다.
    
    <!DOCTYPE html>
    <html>
    <body>
    <h2> </h2>
    <form>
      <label for="lname"> :</label><br>
      <input type="text" id="lname" name="lname" value="" onchange="save(this)">
      <label for="fname"> :</label><br>
      <input type="text" id="fname" name="fname" value="getValue(this)" onchange="save(this)"><br>
    </form>
    <script>
      localStorage= window.localStorage
      function save(input) {
        localStorage.setItem(input.id, input.value)
      }
    document.getElementById("fname").value=localStorage.getItem("fname")
     document.getElementById("lname").value=localStorage.getItem("lname")
    </script>
    </body>
    </html>
    사용자가 다시 열 때 이전에 작성한 내용을 자동으로 복구하기 때문에 SessionStorage를 저장 대상으로 사용할 수 없습니다. 창이 닫힐 때 자동으로 지워지기 때문입니다.

    스토리지 객체를 사용하여 브라우저 캐시


    일반적으로 우리는 웹 응용 프로그램에서 사용할 수 있도록 응용 데이터를 캐시할 수 있다.예를 들어 웹 응용 프로그램은 모든 국가의 화폐 데이터를 불러와야 합니다. WebStorage를 사용하지 않는 상황에서 가져오기 목록을 불러올 때마다 HTTP 요청을 보내서 가져오고, 데이터를 LocalStorage에 저장하면 직접 데이터를 얻을 수 있습니다.
    LocalStorage가 만료되지 않는 특성 때문에 사용자는 페이지를 열 때 대상의 내용을 저장할 수 있으며, 사용자가 LocalStorage 데이터를 삭제하려는 것도 간단하기 때문에 브라우저 캐시 내용을 지우면 된다.

    LocalStorage 변경 내용 모니터링


    Local Storage는 로컬 영구화 저장소로 사용할 수 있는 대상이다. 우리는 그 안에 데이터 저장소를 추가할 수 있다. 마찬가지로 사용자가 조작하는 상황에서 변화가 발생할 때 우리도 감청할 수 있어야 한다. 변화가 발생할 때storage 이벤트를 촉발할 수 있다. 우리는 윈도우에서 이 사건을 감청해서 논리적인 조작을 할 수 있다.
    
    window.addEventListener('storage', () => {
      ...
    });
     
    window.onstorage = () => {
      ...
    };

    총결과 결론


    사용 상황에 따라 LocalStorage 및 SessionStorage를 선택할 수 있습니다.응용 프로그램이 여러 브라우저 창과 탭에서 데이터를 공유해야 하는 경우 LocalStorage를 사용하십시오. 그렇지 않으면 SessionStorage를 사용하십시오.
    SessionStorage와 LocalStorage 모두 XSS 공격을 받기 쉽습니다.따라서 민감한 데이터를 브라우저 저장소에 저장하는 것을 피하십시오.
    마지막으로, WebStorage는 매우 유용하지만, 아래와 같은 상황에서 사용하는 것을 권장합니다.
  • 민감한 데이터가 없습니다
  • 데이터 크기가 5MB 미만입니다
  • 고성능은 중요하지 않다
  • 다음은 Javascript가 SessionStorage와 LocalStorage를 어떻게 사용하는지에 대한 상세한 내용입니다. Javascript에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!

    좋은 웹페이지 즐겨찾기