2011-04-15 71 views
72

以下是在用戶計算機上寫入12個月的JavaScript Cookie。在域上創建JavaScript Cookie並通過子域讀取它

當我們在我們的主域如example.com上設置了cookie後,如果用戶訪問像test.example.com這樣的子域,我們需要繼續在我們的「測試」子域中標識用戶的活動。

但是對於當前的代碼,只要他們離開www.example.com並訪問test.example.com,它們不再被標記爲「HelloWorld」。

任何人都可以幫助我的代碼,以允許cookie跨子域讀取?

<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> 

回答

154

只需設置你的Cookie中的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> 
+0

我試圖在localhost中執行此操作,但我無法更改路徑 – Enve 2013-01-15 10:01:57

+6

@Enve - 瀏覽器將localhost cookie與其他cookie有所不同。或者說,他們以一種使_localhost_工作變得困難的方式來對待所有的cookie。例如,請參閱http://stackoverflow.com/questions/1134290/cookies-on-localhost-with-explicit-domain。我建議編輯你的'hosts'文件並將別名'myserver.local'別名到'127.0.0.1'。然後你可以使用它來訪問你的本地服務器(以及設置cookie的時候),並且希望所有的東西都能正常工作。 – aroth 2013-01-16 00:32:09

+3

您創建和檢索的所有Cookie值都必須是字符串值。字符串可能包含字符,當試圖檢索它們時可能會擾亂本地存儲。我建議的一件事情是使用全局的'encodeURI()'&'decodeURI()'方法來處理任何需要進行的轉換。即'document.cookie = encodeURI(cookieName)+「=」+ encodeURI(cookieValue)'。 – 2013-09-24 19:34:45

24

你想:

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

按照該RFC 2109,有提供給所有子域名的cookie,你必須把.在您的域名前面。

設置路徑= /將使cookie在整個指定域內(又名.example.com)可用。

+0

感謝您對這個您的支持。 – Evan 2011-04-15 01:42:47

+0

FWIW - 我認爲您需要刪除「path = expires =」部分並將其設置爲「expires =」。 – malonso 2012-01-11 15:13:48

+2

根據最新的[RFC 6265](http://tools.ietf.org/html/rfc6265),不再需要在域前加上'.'。 – Dan 2015-06-01 15:32:50

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

這是一個通用的解決方案,從位置需要的對象的根域和設置cookie。倒退是因爲你不知道你有多少個子域名。

+1

它不工作,如果你有一個域像「.com.co」 – nikoskip 2016-10-18 18:25:42