cookies setzen

Gesperrt
Darth-Vader
Beiträge: 661
Registriert: So 25. Jan 2004, 19:06
Wohnort: Stuttgart-Bad Cannstatt
Kontaktdaten:

cookies setzen

Beitrag von Darth-Vader »

Hallo,

ich wollte mal fragen, ob einer von euch cookies innerhalb eines der module benutzt und wie er es macht... :roll:

Seit ich nämlich auf 4.4.2 upgegraded habe, setzt "mein" Umfragemodul keine cookies mehr!
(Ja, es handelt sich hierbei um das Umfragemodul von contenido.de, ich hab es ein bissl meinen Ansprüchen angepasst...;))


So frag ich ab, ob schon ein cookie, also schonmal an der Umfrage teilgenommen wurde:

Code: Alles auswählen

/* ask for cookie of poll */
if ($poll) $button1 = "Go";
/* end ask for cookie of poll */

Und so setz ich dann das cookie, wenn jemand seine Stimme abgegeben hat:

Code: Alles auswählen

/* set cookie to prevent someone of voring more than once */
if ($Radio1>=1 and $Radio1<=6 ) setcookie("poll",$given_answer,(time()+$expires_total));
/* end set cookie */

Thx im Voraus für die Hilfe, so long,

Darth. :twisted:
chobbert
Beiträge: 371
Registriert: Mo 14. Jul 2003, 10:14
Wohnort: Frankfurt am Main
Kontaktdaten:

Re: cookies setzen

Beitrag von chobbert »

Darth-Vader hat geschrieben: Seit ich nämlich auf 4.4.2 upgegraded habe, setzt "mein" Umfragemodul keine cookies mehr!
Vielleicht weil zu diesem Zeitpunkt schon eine Ausgabe erfolgt ist und keine Header mehr gesendet werden können?!


Robert
Darth-Vader
Beiträge: 661
Registriert: So 25. Jan 2004, 19:06
Wohnort: Stuttgart-Bad Cannstatt
Kontaktdaten:

Beitrag von Darth-Vader »

Und warum ging es mit contenido v 4.4.0 ?

Auf dem Client habe ich sämtliche Cookies bereits gelöscht, falls du das gemeint hast. Außerdem habe ich eingestellt, dass ich bei jeder cookie-anfrage gefragt werde. Es kommt aber nichts...


Wird das cookie-setzen in der 4.4.2 irgendwie unterbunden im gegensatz zu 4.4.0?
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

nein. Sobald Daten gesendet wurden, kannst du keine Cookies mehr setzen - weder in 4.4.2 noch in 4.4.0. Die einzige Möglichkeit, Cookies zu setzen, wäre in deinem Layout - bevor auch nur eine Zeile HTML ausgegeben wird, oder über JavaScript.
Darth-Vader
Beiträge: 661
Registriert: So 25. Jan 2004, 19:06
Wohnort: Stuttgart-Bad Cannstatt
Kontaktdaten:

Beitrag von Darth-Vader »

Erst mal thx für deine Antwort und Mühe ;) *schleim*


Ja, das weiss ich, dass man cookies vor jeglichem output setzen muss...
(Quelle: http://www.php.net/manual/en/function.setcookie.php)


Es ging in 4.4.0 aber wirklich, obwohl

Code: Alles auswählen

setcookie("poll","TEST",time()+180)
mitten im src des modules stand. Mich hat das zwar stark gewundert, aber ich fand das auch grade in meinem speziellen Fall sehr praktisch.


Kann es denn sein, dass in 4.4.0 sämtlicher output erst mal in den sog. output-buffer gesteckt wurde und ich deshalb cookies setzen konnte, weil ja noch kein header geschrieben war? Dies könnte imo der Grund sein, warum es jetzt nicht mehr klappt, der output wird nicht mehr gebuffered. ;)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

soweit ich weiß nicht, kann aber durchaus sein. Wenn ein output buffer drin war, dann ging es aber spätestens beim Hauptnavigationsmodul schief - denn dieses nutzt auch den output buffer
Darth-Vader
Beiträge: 661
Registriert: So 25. Jan 2004, 19:06
Wohnort: Stuttgart-Bad Cannstatt
Kontaktdaten:

Beitrag von Darth-Vader »

hmmm, ich meine, wie könnte man sich sonst erklären, warum es in 4.4.0 ging und jetzt in 4.4.2 nicht mehr?


Naja, dann werd ich mir wohl cookies per JS angucken müssen... :x
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

oder, was du auch probieren kannst, wenn du in keinem modul einen output-buffer einsetzt:

vor das layout folgendes setzen:

<?php
ob_start();
?>

und danach

<?php
echo ob_get_contents();
ob_end_clean();
?>

das sollte gehen (obacht, der code ist nur aus dem kopf getippt und nicht getestet :))
Darth-Vader
Beiträge: 661
Registriert: So 25. Jan 2004, 19:06
Wohnort: Stuttgart-Bad Cannstatt
Kontaktdaten:

Beitrag von Darth-Vader »

hehe, schon klar...

thx, ich werde es mal testen und geb dir feedback.


Bis dahin funktioniert folgender Taschentrick bei mir reibunglos:

Einfach am Anfang des layout folgendes setzen: ;)
<?php

if ($HTTP_POST_VARS["Radio1"] or $HTTP_GET_VARS["Radio1"]) {

if($HTTP_POST_VARS["Radio1"]) {$Radio1 = $HTTP_POST_VARS["Radio1"];}
else {$Radio1 = $HTTP_GET_VARS["Radio1"];}

if ($Radio1>=1 and $Radio1<=6) {
/* set cookie to prevent someone of voting more than once */
$expires_seconds = 0;
$expires_minutes = 0;
$expires_hours = 0;
$expires_days = 0;
$expires_months = 6;
$expires_total = ($expires_seconds + ($expires_minutes * 60) + ($expires_hours * 60 * 60) + ($expires_days * 60 * 60 * 24) + ($expires_months * 60 * 60 * 24 * 30));
setcookie("poll",$Radio1,(time()+$expires_total));
/* end set cookie */
} // end if

} // end if

?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>






btw:
Ich habe mittlerweile schon 2 Module, die ich von contenido.de habe umgeschrieben. Unter anderem habe ich auch filter zur Sicherheit eingebaut. Diese "neuen" Versionen möchte ich eigentlich keinem vorbehalten, wenn sie gut sind (das liegt nicht in meinem Ermessen ;)), wo sollte ich die denn mal bei Gelegenheit hinschicken um sie begutachten und letztenendes in die modul-section von contenido stellen zu lassen?


so long, Darth. :twisted:
Gesperrt