Zum Inhalt springen

PHP: Cookie in einem Script setzen und gleich wieder prüfen?


Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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ß ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...