Net-srac Geschrieben 20. August 2005 Teilen Geschrieben 20. August 2005 Hallo zusammen, ich suche nach einer Möglichkeit, eine Funktion in PHP zu schreiben, die ein Cookie setzt und anschließend gleich wieder schaut ob es wirklich gesetzt ist oder nicht um herauszufinden ob der Client Cookies aktiviert hat. Nun hab ich aber das Problem das es nicht so einfach geht weil das Cookie ja erst nach Scriptaufruf gesetzt wird... Wenn ich jetzt quasi 2x die seite aufrufe klappts.. Aber nicht beim ersten mal. function checkCookies() { setcookie("TESTCOOKIE","JTGOW",time()+30,'/'); if(eregi("JTGOW",$_COOKIE["TESTCOOKIE"])) { setcookie("MY_ONE","JTGOW",time()-30,'/'); return 1; } else { return 0; } } [/PHP] Hat jemand von euch schonmal das gleiche Problem gehabt oder einen Lösungsansatz der mir weiterhelfen kann? Besten Dank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mkScheller Geschrieben 21. August 2005 Teilen Geschrieben 21. August 2005 servus, hmm dürfte schwer werden, is aber hochinteressant. Also mit einem <?php flush(); ?> <?php if ($_COOKIE["TESTCOOKIE"]) {echo " yes";} else {echo " not";} ?> gehts nicht, habe ich gerade getestet; was aber funktioniert und auch meine erste (ziemlich bekloppte) idee war, ist, wenn man in das zu erzeugende html ein iframe einbaut, was die selbe seite läd...dementsprechend könnte man dann die logik derart anpassen, dass evtl. was nützliches bei raus kommt... <?php if ($_COOKIE["TESTCOOKIE"]) { } else { setCookie("TESTCOOKIE", "testcase1", time() + 180); } ?> <html> <head> <title>Cookietest</title> </head> <body> <?php print_r($_COOKIE); echo $PHP_SELF; if ($_COOKIE["TESTCOOKIE"]) {echo " yes";} else {echo " not";} ?> <?php if ($_GET["para"] == 1) {} else { ?> <p id=airinfo style="DISPLAY: block"> <IFRAME name="Aircraft Info" src="http://169.254.1.220/xampp/verein_projekt/cookietest.php?para=1" width=400 height=400></IFRAME> </p> <?php } ?> </body> </html> naja gut, letzten endes hat man dann keine zugriff mehr auf die eigentliche seite. Aber wenn man vielleicht Javascript noch ins Spiel bringt? So von wegen: 1. User läd Seite - Cookie soll erstellt werden 2. durch javascript wird eine sekunde später eine http-methode aufgerufen (post/get), die dann irgendwas zurückgibt, anhand dessen zu merken ist, ob das cookie erstellt wurde...das is ja äußerst knifflig - sowas find ich GEIL. oder man läd über javascript die seite einfach nochmal, was aber zu kosten des users geht, dementsprechend müsste es ne kleine seite sein oder kann man nur teile einer seite neuladen lassen? berichte mal wenn du was hast Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mkScheller Geschrieben 21. August 2005 Teilen Geschrieben 21. August 2005 Unter Zuhilfenahme von Javascript funktionierts (Erläuterung unten): <?php if ($_COOKIE["TESTCOOKIE"]) { } else { setCookie("TESTCOOKIE", "testcase1", time() + 20); } ?> <html> <head> <title>Cookietest</title> </head> <body> <?php //check if site is loaded twice if ($_POST["cookiesEnabled"] == "yes" | $_POST["cookiesEnabled"] == "no") { } else { //insert the form for transmitting the availablity of cookies, will be executed by javascript?> <form action="http://127.0.0.1/xampp/verein_projekt/cookietest.php" name="formular" method="POST"> <input name="cookiesEnabled"> </form> <?php } //check if cookies are enabled or not if ($_POST["cookiesEnabled"] == "yes") { ?> Cookies sind erlaubt<br/> Siteinhalt wenn Cookies erlaubt sind <?php } else { ?> Cookies sind NICHT erlaubt<br/> Siteinhalt wenn Cookies NICHT erlaubt sind <?php } ?> <?php if ($_POST["cookiesEnabled"] == "yes" | $_POST["cookiesEnabled"] == "no") { } else { ?> <script type="text/javascript"> <!-- if(document.cookie) document.formular.cookiesEnabled.value = "yes"; else document.formular.cookiesEnabled.value = "no"; document.formular.submit(); //--> </script> <?php } ?> </body> </html>[/PHP] [i]Erläuterung[/i] Die Website wird zweimal unmittelbar nacheinander aufgerufen, dass bewirkt das Javascript ganz unten. Zunächst wird geprüft, bo das Cookie existiert, wenn nicht, dann wird es erstellt. Im nächsten PHP-Abschnitt wird geprüft, ob die POST-Inhalte angegeben sind (passiert nur wenn das Skript das zweite mal ausgeführt wird) . Sie sind zu Erst nicht da und deswegen wird das Formular angezeigt (was man über [CODE]<P id=airinfo style="DISPLAY: none">[/CODE] noch deaktivieren kann, sodass der User ersmal gar nichts sieht). Dann folgt der Inhalt.. Letzten Endes kommt das Skript, was prüft, ob das Cookie da ist oder nicht und die entsprechende Eigenschaft ("yes"/"no") setzt und das Formular abschickt. Dann alles nochmal und der Parameter [i]cookiesEnabled[/i] ist gesetzt und deswegen wird der ganze Kram zur Überprüfung nicht noch einmal ausgegeben. -mk Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 22. August 2005 Teilen Geschrieben 22. August 2005 Unter Zuhilfenahme von Javascript funktionierts (Erläuterung unten): [...] Erläuterung Die Website wird zweimal unmittelbar nacheinander aufgerufen, dass bewirkt das Javascript ganz unten. function checkCookies() { if(eregi("JTGOW",$_COOKIE["TESTCOOKIE"])) { setcookie("MY_ONE","JTGOW",time()-30,'/'); return 1; } else { return 0; } } if (!checkCookies()) { setcookie("TESTCOOKIE","JTGOW",time()+30,'/'); header("Location: http://". $_SERVER["HTTP_HOST"]. $_SERVER["PHP_SELF"]); } [/PHP] [i]Erläuterung[/i] Prüft ob der Cookie gesetzt ist und wenn nicht, wird er gesetzt und die Seite nochmal aufgerufen. Geht ganz ohne Javascript Ein Cookie kann nicht in derselben Seite gesetzt und geprüft werden. Der Browser sendet Cookies (falls vorhanden) für die angeforderte Seite in der Anforderung an den Server mit. Umgekehrt sendet der Server die Aufforderung einen Cookie zu setzen in der Antwort mit. Wir man also unschwer sehen kann, wird der Cookie erst nach dem Übertragen der Cookies angelegt. Ohne neuladen ist eine Prüfung also nicht möglich. EDIT: Was natürlich hier blöd ist, ist: Wenn keine Cookies angenommen werden, läuft das hier unendlich weiter (also bis der Browser das abbricht (wegen zuvielen Weiterleitungen)). Sollte also abgefangen werden. Ist ja nur mal ein Denkanstoß Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mkScheller Geschrieben 22. August 2005 Teilen Geschrieben 22. August 2005 Das man mit einmaligem Laden der site nicht feststellen kann, ob ein Cookie gesetzt ist, haben wir beide verstanden. Deswegen wird die Site ja zweimal geladen. :cool: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.