gzcompress() und Cookies
RFZ
- php
0 rolfrost0 Christian H.
Moin, hab nen Problem...
Wenn ich einen String komprimiere, in einen Cookie speicher, und danach wieder auslese, klappt das nicht. Warum?
Beispiel:
setcookie("gz",gzcompress("teststring"),(time()+3600));
echo gzuncompress($_COOKIE['gz']);
Müste ja (beim zweiten Aufruf) "teststring" ausgeben, bleibt aber leer....
Der Cookie ist gesetzt, das hab ich geprüft. Werden irgendwie die Daten verändert?
cu RFZ
hi,
in einem cookie kannst du ablegen:
Wobei: ein komprimierter String nichts weiter als ein Scalar ist.
Gehe also schrittweise vor mit deinem String:
Viele Grüße, Rolf
Wenn ich einen String komprimiere, in einen Cookie speicher, und danach wieder auslese, klappt das nicht. Warum?
Beispiel:
setcookie("gz",gzcompress("teststring"),(time()+3600));
echo gzuncompress($_COOKIE['gz']);Müste ja (beim zweiten Aufruf) "teststring" ausgeben, bleibt aber leer....
Der Cookie ist gesetzt, das hab ich geprüft. Werden irgendwie die Daten verändert?cu RFZ
Moin,
Gehe also schrittweise vor mit deinem String:
- ablegen und auslesen im cookie / ohne Kompression
- ablegen und auslesen im cookie / mit Kompression
und was hilft mir das? Erstes geht, zweites nicht... Hab mein
Beispiel erweitert:
setcookie("gz",gzcompress("teststring"),(time()+3600));
echo $_COOKIE['gz']."\r\n";
echo gzcompress("teststring")."\r\n";
und ich bekomme (beim zweiten mal):
[Der Inhalt dieser Binaer-Datei musste leider entfernt werden, da er Zeichen enthielt, die in UTF-8 nicht darstellbar waren. Anm. d. Red.]
Es wird ja offensichtlich ein komprimierter String abgelegt, aber er kann nicht dekomprimiert werden, weil dieser im Cookie verfälscht wird! Wie kann ich das beheben?
cu RFZ
hi,
Gehe also schrittweise vor mit deinem String:
- ablegen und auslesen im cookie / ohne Kompression
- ablegen und auslesen im cookie / mit Kompression
und was hilft mir das? Erstes geht, zweites nicht... Hab mein
Es hilft dir bei der Fehlersuche:
Damit kannst du dein Problem einkreisen.
Viele Grüße, Rolf
- vergleiche den string der serverseitig erzeugt wird mit dem string der im cookie abgelegt wird
- vergleiche den string der im cookie abgelegt ist mit dem string den der client zurück an den server sendet
Ach ne, hast du mein Posting gelesen?
Tu das nochmal, da steht bereits dass der im Cookie gespeicherte String NICHT der ist, der von gzcompress() ausgegeben wird.
Viele Grüße, Rolf
cu RFZ
hi,
- vergleiche den string der serverseitig erzeugt wird mit dem string der im cookie abgelegt wird
- vergleiche den string der im cookie abgelegt ist mit dem string den der client zurück an den server sendet
Ach ne, hast du mein Posting gelesen?
Tu das nochmal, da steht bereits dass der im Cookie gespeicherte String NICHT der ist, der von gzcompress() ausgegeben wird.
Ok, wenn du also den Übertragungsweg (HTTP - Protocol, HTTP - Header) somit ausschließen kannst liegt das Problem bei
gzcompress()
Siehe also da.
Schönen Sonntag, Rolf
Ok, wenn du also den Übertragungsweg (HTTP - Protocol, HTTP - Header) somit ausschließen kannst liegt das Problem bei gzcompress()
Hö?
Wenn ich sage, dass der Cookie nicht mehr den Wert hat, den gzcompress() ausgibt, dann MUSS doch der Fehler am Cookie/Browser/HTTP liegen?!
Schönen Sonntag, Rolf
cu RFZ
M.E. nach liegt es wohl daran dass der gzcompress()te String aus lauter Sonderzeichen besteht, die im HTTP-Header nicht richtig übertragen werden können.
Eine Möglichkeit wäre
base64_encode(gzcompress($irgendwas))
und danach wieder zurück - allerdings wird der String dann wieder um ca. 1/3 länger.
Im Grunde sind Cookies auch nicht dazu gedacht so große Datenmengen zu speichern dass sich eine komprimierung lohnen würde. Am besten du speicherst nur eine ID (z.B. Session ID) und assoziierst damit Daten auf dem Server.
Hallo,
Moin, hab nen Problem...
Wenn ich einen String komprimiere, in einen Cookie speicher, und danach wieder auslese, klappt das nicht. Warum?Beispiel:
setcookie("gz",gzcompress("teststring"),(time()+3600));
echo gzuncompress($_COOKIE['gz']);
Mach es mal so:
setcookie("gz",addslashes(gzcompress("teststring")),(time()+3600));
Gruß
Christian