Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Empfohlene Antworten

Veröffentlicht

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

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

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.