2010-07-06 4 views
6

Ich habe einen Cookie, den ich auf meiner App verwende. Es sieht wie folgt aus:PHP-Cookie schreibt auf falsche Domain

+-------+-------+-----------------------+-------+----------+ 
| Name | Value | Domain    | Path | Expires | 
+-------+-------+-----------------------+-------+----------+ 
| foo | bar | my.domain.tld   |/ | Session | 
+-------+-------+-----------------------+-------+----------+ 

In einem Abschnitt von meinem Skript, basierend auf einer Bedingung, ich versuche, den Wert eines Cookies zu ändern. Ich verwende diesen Code:

// overwrite cookie 
if($condition){ 
    setcookie("foo", "cat", 0, "/", "my.domain.tld"); 
} 

Danach meine Cookie-Daten wie folgt aussieht:

+-------+-------+-----------------------+-------+----------+ 
| Name | Value | Domain    | Path | Expires | 
+-------+-------+-----------------------+-------+----------+ 
| foo | bar | my.domain.tld   |/ | Session | 
| foo | cat | .my.domain.tld  |/ | Session | 
+-------+-------+-----------------------+-------+----------+ 

Wie kommt ein . an die Domain vorangestellt werden? Ich möchte den bestehenden Cookie überschreiben.

+0

macht keinen Sinn, es muss * auf * irgendwas.domain.tld gesetzt werden, sonst gibt es irgendwo einen großen Fehler - das einzige, was ich vorschlage, ist, dass du noch einmal nachprüfst und sicherstellst, dass der erste Cookie nicht existiert eingestellt zu .anything eher als die zweite .. – nathan

+0

Nathan, es sieht aus wie es ist kein Fehler so sehr, wie es eine gemeinsame Quelle für Verwirrung sein könnte. Siehe die Antwort unten :) –

+0

Sie könnten ['$ cookie-> setDomain ($ domain)'] finden (https://github.com/delight-im/PHP-Cookie/blob/004cde69ec840e65c15275e09b92ecb1da06f357/src/Cookie.php# L117) hilfreich, wie in [diese eigenständige Bibliothek] (https://github.com/delight-im/PHP-Cookie) gefunden. Es sorgt dafür, dass der von Ihnen angegebene Domainname normalisiert wird. – caw

Antwort

0

Wie sich herausstellt, unter Angabe keine Domäne scheint zu funktionieren:

setcookie("foo", "cat", 0, "/"); 

Erwartete Cookie-Daten:

+-------+-------+-----------------------+-------+----------+ 
| Name | Value | Domain    | Path | Expires | 
+-------+-------+-----------------------+-------+----------+ 
| foo | cat | my.domain.tld   |/ | Session | 
+-------+-------+-----------------------+-------+----------+ 

Seltsam, aber es funktioniert.

0

Aus der Dokumentation:

Die Domäne, die das Cookie vorhanden ist. Um den Cookie in allen Subdomains von example.com verfügbar zu machen, legen Sie ihn auf ".example.com" fest. Das . ist nicht erforderlich, macht es aber mit mehr Browsern kompatibel. Wenn Sie sie auf www.example.com setzen, wird der Cookie nur in der www-Subdomain verfügbar. Weitere Informationen finden Sie in der Spezifikation »Tail Matching«.

Und der Schwanz passende Spezifikation ist hier:

http://curl.haxx.se/rfc/cookie_spec.html

+0

Ich hätte genauer sein sollen. Mit "alles" meinte ich, die Subdomain könnte alles sein. Ich wollte die Antworten nicht auf eine "www" -spezifische Subdomain eingrenzen. Um genau zu sein, möchte ich nicht, dass der Cookie * allen * Subdomains für die Domain entspricht. Ich habe meine Frage aktualisiert. –