Arash Yalpani: Mit Javascript Cookie setzen und mit PHP auslesen

Hallo Forum,

ich versuche onUnload einer Seite einen Wert per JavaScript in einem Cookie zu speichern, um diesen dann auf der Folgeseite per PHP auszulesen. Leider klappt das nicht wie gewünscht:

Man nehme das Beispiel unten...
1. Gebe ich einen Text in das Textfeld ein und mache einen Reload der Seite (Strg-R), steht - wie erwünscht - der Wert des Cookies zur Verfügung. Das allerdings nur im IE. Nutze ich Mozilla, ist das Verhalten wie in 2.) beschrieben.

2. Gebe ich einen Text in das Textfeld ein und verlasse ich die Seite dann über den Link "Seite verlassen/neu laden" ist der Cookie zunächst mal nicht gesetzt (bzw. mit einem alten Wert gefüllt). Erst wenn ich ein zweites mal auf den Link klicke, steht im Cookie der gewünschte Wert.

Hat jemand eine Erklärung dafür?

Danke vielmals für jeden Hinweis!
Schönen Tag noch,
Arash

<?php
echo '<pre>';print_r($_COOKIE);echo '</pre>';
?>
<html>
<head>
<script language="JavaScript">
  function unload() {
    var now = new Date();
    var expires = new Date(now.getTime() + 1000*60*60*24*365);
    document.cookie = 'myText=' + document.getElementById('myText').value + '; expires=' + expires.toGMTString() + ';';
  }
</script>
</head>
<body onUnload="unload()">
<form>
<input type type="text" id="myText">
<input type="button" onClick="alert(document.getElementById('myText').value)" value="myText anzeigen">
<a href="testCookie.php">Seite verlassen/neu laden</a>
</form>
</body>

  1. ich versuche onUnload einer Seite einen Wert per JavaScript in einem Cookie zu speichern, um diesen dann auf der Folgeseite per PHP auszulesen. Leider klappt das nicht wie gewünscht:

    Nutze ich Mozilla, ist das Verhalten wie in 2.) beschrieben.

    1. Gebe ich einen Text in das Textfeld ein und verlasse ich die Seite dann über den Link "Seite verlassen/neu laden" ist der Cookie zunächst mal nicht gesetzt (bzw. mit einem alten Wert gefüllt). Erst wenn ich ein zweites mal auf den Link klicke, steht im Cookie der gewünschte Wert.

    Hat jemand eine Erklärung dafür?

    Eventuell entfernt Mozilla eine Seite erst dann aus der Anzeige, wenn die neue Seite tatsächlich ankommt, und dementsprechend wird onUnload auch erst dann bearbeitet.

    Das würde im Detail bedeuten, daß..

    1. ..die Anfrage für die neue Seite gestellt wird,
      2. ..die neue Seite geliefert wird,
      3. ..onUnload ausgeführt wird und
      4. ..die neue Seite dargestellt wird.

    Dein Cookie muß aber schon in der Anfrage in Schritt 1 zum Server geschickt werden (dorthin, wo das PHP-Skript läuft), damit die neue Seite es beachten kann. Das geht aber nicht, da der Cookie erst in Schritt 3 in's Leben gerufen wird.

    Abhilfe: Kein halbgares Formular mit Javascript-Spielereien aufbohren, sondern ordentlich mittels <input type=submit> abschicken und Cookie im PHP-Skript setzen.

    Gruß,
      soenk.e

    1. Hallo Sönke,

      die Vermutung hatte ich auch. Habe mich dafür entschieden, das komplett ohne onUnload zu machen, sondern das Cookie ruhig schon früher (bei einer Aktion) zu setzen. Danach klappt es prima.

      <input type=submit> hätte mirnicht weitergeholfen, da die Einstellungen auch bei einem Reload bzw. einem Link-Klick erhalten bleiben müssen.

      Danke jedenfalls!
      Grüsse, Arash