Mischa: Probleme mit Sessions

Beitrag lesen

Hallo,

danke erstmal für deine umfangreiche Antwort!

Wichtigster Punkt: Stimmen bei dir zuhause und beim Hoster die Einstellungen von

  • register_globals
  • magic_quotes_gpc
    überein?

Hmmm... interessant. Bei beiden Einstellungen ist beim Webserver "Off" und auf meinem PC "On" gesetzt. Register_globals ist ja soweit ich weiß dafür "zuständig", dass die Variablen übergeben werden, ohne dass man sie über den Array $_GET erst abrufen muss. Aber was hat das hiermit zu tun? Und was bewirkt das magic_quotes_gpc?

Zweitens würde ich bei Sessions nie die Variablenwerte von normalen Variablen in $_SESSION hineinkopieren und umgekehrt, sondern wo immer möglich direkt auf $_SESSION zugreifen. Dass bei dir da einiges schiefgeht, siehst du ja.

Ja, das sehe ich. Aber wieso gibt's da Probleme? Ich speicher doch nur den Wert einer Variablen in die einer anderen. Sollte doch an sich funktionieren?! (finde "normale" Variablen übersichtlicher und leichter zu handhaben - vielleicht auch einfach Gewöhnung)

Dass beispielsweise leergelassene Felder in der Vorschau mit "Array" gefüllt werden, zeigt irgendeine Undefiniertheit oder falsche Ansprache eines Arrays. Die ist aber aus dem geposteten Code nicht ersichtlich.

Dass eingegebene Werte in PHP so seltsam verstümmelt werden, kann auch an einer vorgenommenen Typwandlung liegen. Ich meine, dass ich da mal irgendwas entdeckt hatte - find's aber nicht mehr im Archiv.

Nebenfrage: Was bedeuten eigentlich deine Variablen in diese Zeilen hier, bzw. wo kriegen die ihre Werte her? Doch nicht etwa aus dem Formular, oder?

session_start();
     $sid                 = session_id();
     $_SESSION['icon']    = $icon;
     $_SESSION['sender']  = $sender;
     $_SESSION['ort']     = $ort;
     $_SESSION['mail']    = $mail;
     $_SESSION['website'] = $website;
     $_SESSION['text']    = $text;
     $_SESSION['preview'] = 1;

Doch, natürlich! Wo soll ich die denn sonst herkriegen?
Ich muss ja die eingegebenen Werte irgendwie temporär speichern und dann gleich wieder ausgeben und da das Eingabeformular und die Vorschauseite sich in zwei verschiedenen Dateien befinden, geht das nur über Sessions. Sobald das Formular über den "Vorschau"-Button abgesadt wird, wird zunächst folgender Quelltext verarbeitet (in der prozess_guestbook.php):

--------------------------------------------------------------
  $icon     = htmlspecialchars($_POST['icon']);
  $sender   = htmlspecialchars($_POST['sender']);
  $ort      = htmlspecialchars($_POST['ort']);
  $mail     = htmlspecialchars($_POST['mail']);
  $website  = htmlspecialchars($_POST['website']);
  $text     = htmlspecialchars($_POST['text']);
--------------------------------------------------------------

Anschließend kommt der obige Teil. Ist vielleicht ein bisschen umständlich gemacht - das gebe ich zu - aber ich verstehe bis jetzt nicht, was daran so falsch ist bzw. warum bei der Vorschau so ein "Blödsinn" ausgegeben wird!

Außerdem:

$loc = "content.php?cat=kontakt&id=guestbook&PHPSESSID=" . $sid;
     header("Location: $loc");

Der Header "Location" erfordert eine absolute URL, beginnend mit "http://".

Ich weiß - das hatte ich temporär mal so mit relativem Pfad gemacht, damit's sowohl bei mir lokal, als auch auf dem Server funktioniert (klappt ja trotzdem) und hab's danach vergessen in einen absoluten Pfad zu verwandeln.

Und zweitens solltest du die Konstante "SID" dort einsetzen, wo du in URLs die Session-ID benötigst. Die enthält nämlich auch den Session-Namen, der nicht in jedem Fall "PHPSESSID" lauten muß.

Lautet er in diesem fall aber - hab nachgeguckt. ;)
Wie gebe ich die SID denn dann so weiter - nachdem, was ich gelesen habe, müsste das dann ja so aussehen:

$loc = "content.php?cat=kontakt&id=guestbook&" . SID;

Ist das so richtig verwandt? Oder wird die anders weitergegeben?

Grüße,
  Mischa