Creare un cookie JavaScript su un dominio e leggerlo tra sottodomini


101

Di seguito è riportato un cookie JavaScript che viene scritto sul computer dell'utente per 12 mesi.

Dopo aver impostato il cookie sul nostro dominio principale, ad esempio example.com, se l'utente visita un sottodominio come test.example.com, dobbiamo continuare a identificare l'attività dell'utente attraverso il nostro sottodominio di "prova".

Ma con il codice corrente, non appena lasciano www.example.come visitano test.example.com, non vengono più contrassegnati come "HelloWorld".

Qualcuno potrebbe aiutarmi con il mio codice per consentire la lettura del cookie attraverso i sottodomini?

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

Risposte:


209

Basta impostare gli attributi domaine pathsul tuo cookie, come:

<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
Sto provando a farlo in localhost e non riesco a cambiare percorso
Enve

7
@Enve - I browser trattano i cookie localhost in modo leggermente diverso dagli altri cookie. O meglio, trattano tutti i cookie in un modo che rende difficile lavorare con localhost . Ad esempio, vedi stackoverflow.com/questions/1134290/… . Suggerisco di modificare il hostsfile e di creare un alias simile myserver.locala 127.0.0.1. Quindi puoi usarlo per accedere al tuo server locale (e quando si impostano i cookie), e si spera che tutto funzioni.
aroth

3
Tutti i valori dei cookie che crei e recuperi devono essere valori stringa. Le stringhe possono contenere caratteri che possono sconvolgere la memoria locale quando si tenta di recuperarle. Una cosa che suggerirei è di utilizzare i metodi globali encodeURI()e decodeURI()per il nome e il valore del cookie per gestire qualsiasi conversione che dovrebbe aver luogo. cioè document.cookie = encodeURI(cookieName) +"=" + encodeURI(cookieValue).
Dzeimsas Zvirblis

2
Se il codice lato server è scritto in C #, Rick Strahl fornisce un metodo per ottenere il dominio di base, ad esempio example.com, dal dominio su weblog.west-wind.com/posts/2012/Apr/24/…
CAK2

Purtroppo sub.example.comnon è possibile impostare cookie per l' .example.comutilizzo di javascript
Marinos An

27

Tu vuoi:

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

Come da RFC 2109 , per avere un cookie disponibile per tutti i sottodomini, devi mettere un .davanti al tuo dominio.

Impostando il percorso = / il cookie sarà disponibile all'interno dell'intero dominio specificato (aka .example.com).


FWIW - Penso che sia necessario rimuovere il pezzo "path = expires =" e impostarlo su "expires =".
malonso

3
Secondo la più recente RFC 6265 non è più necessario includere la parte .anteriore del dominio.
Dan

6

Ecco un esempio funzionante:

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

Questa è una soluzione generica che prende il dominio principale dall'oggetto posizione e imposta il cookie. L'inversione è perché non sai quanti sottodomini hai, se ce ne sono.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.