4 Stimmen

GWT Cookies.getCookie gibt "null" zurück

Update : Ich habe versucht, das erstellte Cookie im Browser zu löschen und es erneut zu versuchen, aber es ist nicht passiert. Möglicherweise habe ich irgendwann ein Cookie mit dem Wert "null" gesetzt.

(Ok, das ist wahrscheinlich eine retorische Frage, also mache ich es CW)

In der Dokumentation für Google Web Toolkit steht Folgendes über Cookies.getCookie:

public static java.lang.String getCookie(java.lang.String name)

Ruft das mit dem angegebenen Namen verbundene Cookie ab.

Parameter:

  • Name - der Name des abzurufenden Cookies

Rückgabe:

  • den Wert des Cookies oder null, wenn der Cookie nicht existiert

Nun, ich habe gerade einige Stunden damit verbracht, meinen Kopf gegen eine Wand zu schlagen, denn zumindest im gehosteten Modus des Browsers (ich habe es noch nicht mit einem echten Browser getestet), gibt es nicht zurück null gibt es zurück "null" , d.h. die wörtliche Zeichenkette, 4 Zeichen lang, beginnend mit "n".

Sowohl null als auch "null" sehen bemerkenswert ähnlich aus, wenn man sie ausdruckt, aber nur eines reagiert auf eine if (cookie == null) Cookies.setCookie(cookie, newValue);

Gibt es einen denkbaren Grund, warum Google das so gemacht hat, oder will mich jemand verarschen?

1voto

user136776 Punkte 596

Sind Sie sicher, dass das Cookie nicht auf den Wert "null" gesetzt ist? Sie sollten sich die Header der Antwort ansehen, nur um sicherzugehen. Abhängig von der GWT-Version ist dies auf unterschiedliche Weise möglich - am einfachsten ist es, auf "Compile" zu klicken und einen echten Browser zu verwenden, der es einfach macht, die Header zu sehen.

1voto

mooreds Punkte 4663

Ich kann Ihre Kopfschmerzen verstehen (ich habe vor einiger Zeit einen Fehler in der gwt-Cookie-Dokumentation gemeldet: http://code.google.com/p/google-web-toolkit/issues/detail?id=387&can=1 )

Welche Version von GWT verwenden Sie?

Mit welchem Browser haben Sie den Test durchgeführt?

Ich habe mir gerade den Code für 1.6.4 angesehen (sie liefern den Quellcode aus), und ich würde Ihnen raten, dies als Fehler zu melden. Siehe Ausgabe 2994 für etwas ähnliches, aber ich denke, dies ist anders genug, um eine eigene Fehlerablage zu rechtfertigen.

Es sieht so aus, als ob GWT Hashmaps anders behandelt (aus Leistungsgründen?) als normale Hashmaps; siehe java.util.AbstractHashMap im Verzeichnis com/google/gwt/emul, wenn Sie die Datei gwt-user.jar entpacken. Hier ist die get()-Implementierung.

   return (key == null) ? nullSlot : (!(key instanceof String) ? getHashValue(
   key, getHashCode(key)) : getStringValue((String) key));

Und vielleicht ist dies das Problem.

Ich hoffe, das hilft.

Dan

1voto

youmute Punkte 1

Ich denke, wenn Sie ein Cookie auf null setzen, wird der Wert des Cookies "null" (String). Sie sollten das Cookie mit Cookies.removeCookie("CookieName") entfernen, wodurch das Cookie gelöscht wird und Ihre Abfrage die echte Null und nicht den String zurückgibt.

0voto

Robert Childan Punkte 983

Vielleicht kann ein Versuch mit einer Dauer die Situation ändern. Versuchen Sie dies:

Date now = new Date();
long nowLong = now.getTime();
nowLong = nowLong + (1000 * 60 * 60 * 24 * 7);//seven days
now.setTime(nowLong);

Cookies.setCookie("sampleCookieName", "sampleCookiValue", now);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X