Seite 1 von 1

cookies setzen

Verfasst: So 25. Jan 2004, 19:30
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:

Re: cookies setzen

Verfasst: So 25. Jan 2004, 19:39
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

Verfasst: So 25. Jan 2004, 20:24
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?

Verfasst: So 25. Jan 2004, 21:16
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.

Verfasst: So 25. Jan 2004, 21:37
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. ;)

Verfasst: So 25. Jan 2004, 21:39
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

Verfasst: So 25. Jan 2004, 21:43
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

Verfasst: So 25. Jan 2004, 22:59
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 :))

Verfasst: So 25. Jan 2004, 23:16
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: