Sönke Tesch: Seite lädt nicht neu nach dem Einsatz von Sessions

Beitrag lesen

Ich habe Tests gefahren, so mit 100 Seiten aufreufen etc. und bin zu dem Schluß gekommen, das die Datenbank schneller ist als die Session-Variable,

Nein, das ist unmöglich. Erstens führst Du in dem problematischen Skript überhaupt keine Änderung an $UserID durch und zweitens stehen alle externen Variablen mit Beginn des Skriptablaufs zur Verfügung.

Dein Skript scheint funktionsmäßig korrekt zu sein, es müßte sich also um ein Cache-Problem handeln. Versuche nochmal, die <meta>-Angaben wie beschrieben per header() auszugeben.

Davon unabhängig würde ich Dir wirklich ans Herz legen, den Warenkorb in die Session zu legen - Du ersparst Dir damit bestimmt die Hälfte vom Code, weil die ganzen voluminösen mysql-Geschichten wegfallen.
Der "elseif ($Steuerung = 'update')"-Block beispielsweise kann mit allen Eventualitäten auf folgende kurze Zeilen zusammenschrumpfen:

if (isset($_SESSION["artikel"][$MaterialID]))
     if ($Art=="plus")
        $_SESSION["artikel"][$MaterialID]++;
       else
        $_SESSION["artikel"][$MaterialID]--;
   else
     $_SESSION["artikel"][$MaterialID]=1;

Weiterhin solltest Du unbedingt:

  • register_globals ausschalten und die superglobals $_GET und $_SESSION verwenden, so wie Du es bereits mit $_POST machst. Mit register_globals versaust Du Dir den gesamten Namensraum und öffnest unter Umständen auch noch Sicherheitslöcher, weil man dem Skript gerade bei den URL-Parametern ohne Aufwand x-beliebige Variablen unterjubeln kann. Das ist auch der Grund, warum register_globals jetzt standardmäßig ausgeschaltet ist und diese superglobals eingeführt wurden.

  • Die Session startest Du besser mit session_start(). Damit entfällt die Registrierung jeder einzelnen Variable, weil Du einfach auf $_SESSION zugreifen kannst - jegliche Änderung darin wird beim Skriptende automatisch gespeichert.

  • Du solltest Daten, die nicht mit 110%-iger Sicherheit aus Zahlen bestehen, immer mit htmlentities() ausgeben. In Deinem Fall betrifft das insbesondere Hersteller- und Artikelname, aber durchaus auch andere Variablen.

  • Du solltest Dich eventuell mit mysql_escape_string() vertraut machen.

  • Deine URLs sind falsch. Das Zeichen & darf in HTML niemals alleine stehen, auch nicht in href-Attributen oder ähnlichem. Willst Du ein Und haben, benutze &. Oder konfiguriere Dein PHP so, daß es auch das Semikolon als Trennzeichen akzeptiert. Siehe auch http://validator.w3.org.

Gruß,
  soenk.e