Erstellen eines JavaScript-Cookies für eine Domain und Lesen über Subdomains hinweg


101

Unten finden Sie ein JavaScript-Cookie, das 12 Monate lang auf dem Computer des Benutzers geschrieben wird.

Nachdem wir das Cookie in unserer Hauptdomäne gesetzt haben, z. B. example.comsollte der Benutzer eine Subdomain wie besuchen test.example.com, müssen wir weiterhin die Aktivität des Benutzers in unserer "Test" -Unterdomäne identifizieren.

Mit dem aktuellen Code werden sie jedoch nicht mehr als "HelloWorld" gekennzeichnet , sobald sie das Hotel verlassen www.example.comund besuchen test.example.com.

Kann jemand mit meinem Code helfen, damit das Cookie über Subdomains hinweg gelesen werden kann?

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

Antworten:


209

Legen Sie einfach die Attribute domainund pathin Ihrem Cookie fest, z.

<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
Ich versuche dies in localhost zu tun und kann den Pfad nicht ändern
Enve

7
@Enve - Browser behandeln localhost-Cookies etwas anders als andere Cookies. Oder besser gesagt, sie behandeln alle Cookies so, dass die Arbeit mit localhost schwierig wird. Siehe beispielsweise stackoverflow.com/questions/1134290/… . Ich schlage vor, Ihre hostsDatei zu bearbeiten und so etwas wie myserver.localzu aliasen 127.0.0.1. Dann können Sie damit auf Ihren lokalen Server zugreifen (und beim Setzen von Cookies), und hoffentlich sollte alles funktionieren.
aroth

3
Alle Cookie-Werte, die Sie erstellen und abrufen, müssen Zeichenfolgenwerte sein. Zeichenfolgen können Zeichen enthalten, die den lokalen Speicher beim Abrufen stören können. Eine Sache, die ich vorschlagen würde, ist die Verwendung der globalen encodeURI()& decodeURI()Methoden für den Cookie-Namen & -Wert, um jede Konvertierung durchzuführen, die stattfinden müsste. dh document.cookie = encodeURI(cookieName) +"=" + encodeURI(cookieValue).
Dzeimsas Zvirblis

2
Wenn Ihr serverseitiger Code in C # geschrieben ist, bietet Rick Strahl eine Methode zum Abrufen der
Basisdomäne

Leider sub.example.comkann kein Cookie für die .example.comVerwendung von Javascript gesetzt werden
Marinos An

27

Sie wollen:

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

Gemäß dem RFC 2109 , ein Cookie für alle Sub - Domains zur Verfügung zu haben, müssen Sie setzen .vor Ihrer Domäne.

Durch Festlegen des Pfads = / wird das Cookie in der gesamten angegebenen Domäne (auch bekannt als .example.com) verfügbar sein .


FWIW - Ich denke, Sie müssen das Stück "path = expires =" entfernen und auf "expires =" setzen.
Malonso

3
Gemäß dem neueren RFC 6265 ist es nicht mehr erforderlich, das .vor der Domäne einzuschließen.
Dan

6

Hier ist ein Arbeitsbeispiel:

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

Dies ist eine generische Lösung, die die Stammdomäne aus dem Standortobjekt entnimmt und das Cookie setzt. Die Umkehrung ist, weil Sie nicht wissen, wie viele Subdomains Sie haben, wenn überhaupt.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.