Skapa en JavaScript-cookie på en domän och läsa den över underdomäner


Nedan är en JavaScript-cookie som skrivs på användarens dator i 12 månader.

Efter att vi har satt kakan på vår huvuddomän såsom example.com, om användaren besöker en underdomän som test.example.com, behöver vi fortsätta att identifiera användarens aktivitet över vår "test"-underdomän.

Men med den nuvarande koden, så snart de lämnar www.example.com och besöker test.example.com, markeras de inte längre som "HelloWorld".

Skulle någon kunna hjälpa till med min kod för att tillåta att cookien läses över subdomäner?

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

Svar #1

Sätt bara domain och path attributen på din cookie, som:

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

Svar #2

Du vill ha:

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

Enligt RFC 2109, för att en cookie ska vara tillgänglig för alla underdomäner, måste du sätta en . framför din domän.

Att ställa in path=/ kommer att göra kakan tillgänglig inom hela den angivna domänen (dvs .example.com).

Svar #3

Här är ett fungerande exempel :

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

Detta är en generell lösning som tar rot-domänen från platsobjektet och sätter cookien. Omvändningen är eftersom du inte vet hur många underdomäner du har, om några.

Relaterade artiklar