도메인에서 JavaScript 쿠키를 만들고 하위 도메인에서 읽기


101

아래는 사용자의 컴퓨터에 12 개월 동안 기록되는 JavaScript 쿠키입니다.

과 같은 기본 도메인에 쿠키를 설정 한 후 example.com사용자가과 같은 하위 도메인을 방문하는 경우 test.example.com"테스트"하위 도메인에서 사용자의 활동을 계속 식별해야합니다.

그러나 현재 코드를 사용하면을 (를) 떠나고 www.example.com방문 하자마자 test.example.com더 이상 "HelloWorld"로 플래그가 지정되지 않습니다.

쿠키를 하위 도메인에서 읽을 수 있도록 누구든지 내 코드를 도와 줄 수 있습니까?

<script type="text/javascript">
  var cookieName = 'HelloWorld';
  var cookieValue = 'HelloWorld';
  var myDate = new Date();
  myDate.setMonth(myDate.getMonth() + 12);
  document.cookie = cookieName +"=" + cookieValue + ";expires=" + myDate;
</script>

답변:


209

그냥 설정 domainpath같은 쿠키에 속성 :

<script type="text/javascript">
var cookieName = 'HelloWorld';
var cookieValue = 'HelloWorld';
var myDate = new Date();
myDate.setMonth(myDate.getMonth() + 12);
document.cookie = cookieName +"=" + cookieValue + ";expires=" + myDate 
                  + ";domain=.example.com;path=/";
</script>

2
localhost에서이 작업을 수행하려고하는데 경로를 변경할 수 없습니다
Enve

7
@Enve-브라우저는 로컬 호스트 쿠키를 다른 쿠키와 약간 다르게 처리합니다. 또는 로컬 호스트 와의 작업을 어렵게 만드는 방식으로 모든 쿠키를 처리합니다 . 예를 들어 stackoverflow.com/questions/1134290/…을 참조하십시오 . hosts파일을 편집 myserver.local하고 127.0.0.1. 그런 다음이를 사용하여 로컬 서버에 액세스 할 수 있으며 (쿠키 설정시) 모든 것이 작동하기를 바랍니다.
aroth

3
생성하고 검색하는 모든 쿠키 값은 문자열 값이어야합니다. 문자열에는 검색을 시도 할 때 로컬 저장소를 망칠 수있는 문자가 포함될 수 있습니다. 내가 제안하는 한 가지는 쿠키 이름 및 값에 대한 전역 encodeURI()decodeURI()메서드를 사용하여 발생해야하는 모든 변환을 처리하는 것입니다. 즉 document.cookie = encodeURI(cookieName) +"=" + encodeURI(cookieValue).
Dzeimsas Zvirblis 2013 년

2
서버 측 코드가 C #으로 작성된 경우 Rick Strahl은 weblog.west-wind.com/posts/2012/Apr/24/…
CAK2

불행히도 자바 스크립트 sub.example.com.example.com사용 하기위한 쿠키를 설정할 수 없습니다
Marinos An

27

원하는 :

document.cookie = cookieName +"=" + cookieValue + ";domain=.example.com;path=/;expires=" + myDate;

RFC 2109에 따라 모든 하위 도메인에서 쿠키를 사용할 수 있도록하려면 .도메인 앞에를 넣어야 합니다.

path = /를 설정하면 지정된 전체 도메인 (일명 .example.com) 내에서 쿠키를 사용할 수 있습니다 .


FWIW- "path = expires ="부분을 제거하고 "expires ="로 설정해야한다고 생각합니다.
malonso

3
최신 RFC 6265에 따라 더 이상 .도메인 앞에 를 포함 할 필요가 없습니다 .
Dan

6

다음은 작동하는 예입니다.

document.cookie = "testCookie=cookieval; domain=." + 
location.hostname.split('.').reverse()[1] + "." + 
location.hostname.split('.').reverse()[0] + "; path=/"

이것은 위치 개체에서 루트 도메인을 가져와 쿠키를 설정하는 일반적인 솔루션입니다. 그 반대는 하위 도메인이 몇 개 있는지 모르기 때문입니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.