2013-05-28 2 views
3

맞습니다. 세션 저장은 클라이언트 측에 저장되며 하나의 탭에서만 액세스 할 수 있습니다.HTML5 세션 저장 서버에 전송

세션 저장소에 저장된 정보를 서버로 보내려면 어떻게해야합니까? 쿠키를 사용할 수는 있지만 두 개의 탭을 열면 두 번째 탭에서 쿠키가 다시 작성됩니다.

감사

+0

아약스 요청이 떠오른다. –

답변

0

sessionStorage 1 개 도메인이 아닌 1 개 탭을 사용할 수 있습니다. 한 탭에 페이지 정보를 설정하면 두 번째 탭에서 정보를 읽을 수 있습니다. 죄송합니다, 나는 이것이 이렇게 효과가 있다고 생각했습니다. 하지만 그렇지 않습니다.이 작업을하려면 localStorage 또는 쿠키가 필요합니다.

그래서 쿠키에 저장하는 것이 가능한 옵션이지만, 그렇게한다면 왜 당신은 심지어 sessionStorage를 사용하고 있습니까? 어쨌든 서버에 정보를 저장하는 경우

또한

을 (당신은 문자열을 보낼 수 있기 때문에 JSON으로 데이터를 변환해야 할 것하지만), Ajax를 통해 서버에 sessionStorage의 내용을 보낼 그러나 수 , 왜 당신은 sessionStorage를 사용하고 있습니까? localStorage와 sessionStorage의 핵심은 서버가 알 필요가없는 사용자 별 정보를 저장하는 것입니다.

+2

* sessionStorage는 1 개의 탭이 아니라 1 개의 도메인에서 사용할 수 있습니다 * - 사실이 아닙니다 : https://developer.mozilla.org/en-US/docs/Web/Guide/DOM/Storage#sessionStorage- 글로벌 개체입니다 (sessionStorage)은 페이지 세션 기간 동안 사용할 수있는 저장 영역을 유지 관리합니다. 페이지 세션은 브라우저가 열려 있고 페이지 재로드 및 복원시까지 지속됩니다. 새 탭이나 창에서 페이지를 열면 새 세션이 시작됩니다. – Quentin

+0

나는 똑같은 페이지가 열린 두 개 이상의 탭이 있다면 같은 세션을 사용할 것이라고 생각했다. 방금 시도했지만 이것이 사실이 아닙니다. – Johan

8

저장소 객체 (둘 다 localStorage 및 sessionStorage)는 동일한 페이지가 열려있는 모든 탭에서 사용할 수 있습니다.

그러나 새 탭을 열면 내부적으로 새 저장소 개체가 만들어 지지만 일부 주석 상태는 올바르지 않지만 설명서를 잘못 해석 한 것입니다. 이것은 첫 번째 복제본이므로 그 시점의 내용은 같습니다.

해당 지점과 별도로 처리되지만 코드에서 storageevent을 청취하여 동기화합니다. http://dev.w3.org/html5/webstorage/#the-sessionstorage-attribute에서

:

새로운 최상위 수준의 브라우징 컨텍스트가 기존 브라우징 컨텍스트를 복제하여 만든

, 새로운 브라우징 컨텍스트 로 시작해야합니다 (사양은 구현을 해결하고 있습니다) 원래와 동일한 세션 저장 영역이지만, 두 세트는 을 그 시점에서 별도로 간주해야하며, 어떤 식 으로든 에 서로 영향을 미치지 않아야합니다. [...] 세션 저장 영역 [...]에 연결된 Storage 객체 x에 대해 setItem(), removeItem() 및 clear() 메서드가 호출되면 다음 모든 Document 객체에 대해 창 개체의 sessionStorage 특성의 저장소 개체가 과 연결되어 있고 x가 아닌 동일한 저장소 영역에 저장소 알림이 전송됩니다.

저장이 활성 탭에서 수정되면, storage 이벤트가 (같은 기원에 대한) 모든 다른 탭에 전송되는 말을하는 것입니다

-하지만 활성 탭은 물론 필요하지 아니하는 이것은 수정 된 것입니다.

사용 event는 (이벤트에 또한 oldValue가) 현재 비활성 탭 (들)의 localSession을 업데이트 keynewValue 필드를 읽을 수 있습니다.storageArea에는 영향을받는 Storage 개체가 들어 있습니다 (로컬 저장소와 세션 저장소를 모두 사용하는 경우 유용함).

"하나의 도메인"에 관해서는 - 예, 동일한 데이터는 동일한 출처 (스키마, 도메인 및 포트)에서만 사용할 수 있습니다.

서버로 데이터를 완전히 보낼 수 있습니다. Storage (세션 및 로컬)에 저장된 모든 내용은 문자열로 저장됩니다. 그래도 인코딩을 권하고 싶습니다 (JSON은 이 아니며이 필요하므로 이미 문자열로 저장되어 있습니다). f.ex 사용 :

var dataForServer = encodeURIComponent(sessionStorage.getItem(myKey)); 

그런 다음 양식, URL 또는 아약스의 일부로 보내십시오.

관련 문제