Im Gegensatz zu Computerprogrammen besitzen Webanwendungen zunächst
keine Möglichkeit, Benutzereinstellungen zu speichern. Eine Möglichkeit,
dieses Problem zu lösen, besteht darin, die erforderlichen Daten auf dem
Server zu speichern. Dieser Ansatz hat zwei Nachteile: Zunächst besteht
per se keine Verbindung zwischen den Daten und dem Benutzer. Um diese
herzustellen, müsste eine Benutzerverwaltung, mit Erfassung des
Benutzernamens und eines Passworts etc., eingeführt werden. Ebenfalls
würden die gespeicherten Anwendungsdaten die Bereitstellung einer vom
Benutzeraufkommen abhängigen Menge von Speicherplatz auf dem Server
erfordern, nebst einer Verwaltung dieser Daten.
Cookies lösen dieses Problem durch für den Benutzer transparentes
Speichern der Anwendungsdaten auf dem Rechner des Benutzers. Dabei
werden die Daten automatisch mit der zugehörenden Website assoziiert.
Aus PHP heraus ist es möglich, Cookies auf dem Rechner des Anwenders zu
platzieren und von dort, beim nächsten Aufruf des zugehörenden
PHP-Scripts, wieder einzulesen. Die Cookie-Daten werden bei Aufruf der
PHP-Seite automatisch im HTML-Header mit übertragen. Mittels Cookies ist
es also auf einfache Art möglich, zunächst flüchtige PHP-Variablen in
statische Variablen umzuwandeln, deren Werte zwischen den Aufrufen der
PHP-Seite erhalten bleiben und so dauerhafte Einstellungen bzw. Daten zu
speichern.
Website-Betreiber benutzen Cookies häufig, um den Rechner eines Surfers
mit einer ID zu versehen, die auch dann funktioniert, wenn der/die
Surfer/-in dynamisch IP-Adressen zugeteilt bekommt. Auf diese Weise kann
der Rechner - und damit mit hoher Wahrscheinlichkeit auch der vormalige
Besucher der Webseite - wiedererkannt und ein Profil der von ihm/ihr
besuchten Webseiten erstellt werden. Derartige Informationen werden dann
z. B. für Marktforschungszwecke eingesetzt. Der Gebrauch derartiger
"Tracking-Cookies" hat diese Technologie in Verruf gebracht. Aus diesem
Grund besteht für Benutzer die Möglichkeit, den Gebrauch von Cookies in
ihren Browsern einzuschränken oder zu deaktivieren. Hierfür existieren
in den Browsern recht umfangreiche Cookie-Manager.
Nichtsdestotrotz sind Cookies ein einfaches Hilfsmittel, eine/-n
Surfer/-in persönlich anzusprechen und sie oder ihn persönliche
Einstellungen abspeichern zu lassen.
In der ersten Übung probieren wir die Cookie-Technologie an Hand eines
Zugriffszählers aus. Ein derartiger Zähler kann benutzt werden, um neue
Besucher, die eine Webseite zum ersten Mal aufsuchen, zu identifizieren,
sie entsprechend zu begrüßen und ggf. Hilfeinformation zum Gebrauch der
Webanwendung anzuzeigen. Später kann der Zugriffszähler dann z. B.
benutzt werden, um aktuelle (Sonder-)Angebote einzublenden, die sich
ebenfalls an den persönlichen Vorlieben des Benutzers orientieren
können. Bei häufigerem Aufruf der Webseite könnte der Benutzer auch dazu
animiert werden, Vertragskunde zu werden.
Abb.1-2: Unterschiedliche Begrüßungen durch Cookies
Implementieren Sie einen Zugriffszähler für ihren Webshop "Amazone"
in der Art, dass bei Erstaufruf des Webauftritts eine
Begrüßungsmeldung erscheint, die den Kunden gleichzeitig - unter
Gewährung eines Einkaufsgutscheines - dazu animiert, seine/ihre
Kundendaten einzugeben, siehe Abb. 1. Sie brauchen das Webformular
für die Eingabe der Kundendaten aber nicht zu programmieren.
Weitere Aufrufe führen dann zur Anzeige aktueller (fiktiver)
Sonderangebote (s. Abb. 2).
Auch hier gilt, dass Sie den Link auf die Sonderangebote nicht
explizit programmieren müssen. D. h., Sie brauchen keine HTML-Seite
mit Sonderangeboten zu erstellen.
Hinweis: Wählen Sie eine relativ kurze Verfallszeit von
60s oder weniger für ihren Cookie, damit Sie durch wiederholtes
Abschicken von Anfragen zwischen den verschiedenen Meldungen
automatisch umschalten können.
Erweitern Sie die Darstellung der Suchergebnisse derart, dass nun
auch die Anzahl der gefundenen Suchergebnisse ausgegeben wird. Die
Anzahl steht im Objekt des Suchergebnisses in der Eigenschaft num_rows.
Abb.3:
Ausgabe der Anzahl der Suchergebnisse
Aufgabe 2: Amazone III Sessions
Bisher haben die Kunden des Online-Shops "Amazone" nur die Möglichkeit
nach Büchern zu suchen - sie können die gefundenen Bücher noch nicht
kaufen. Was fehlt, ist also ein Warenkorb, dem der Kunde die gewünschten
Bücher hinzufügen kann, um schließlich auf der Grundlage des Inhalts des
Warenkorbs eine Bestellung abzuschicken. In dieser Übung werden wir den
Online-Shop dahingehend erweitern, dass der/die Kund/-in ausgewählte
Bücher in einen Warenkorb legen und sich den Inhalt des Warenkorbs
anzeigen lassen kann. Den Bestellvorgang selbst werden wir nicht
implementieren.
Abb.4:
Webshop mit Warenkorb
Um einen Warenkorb zu erstellen, benötigen wir eine Möglichkeit, die
Daten einer Sitzung temporär zwischenzuspeichern. Anderenfalls würden
einmal ausgewählte Bücher einfach verschwinden, sobald wir eine neue
Suchanfrage an den Server schicken.
Cookies, Serverdateien und statische Variablen scheiden in diesem
Zusammenhang aus, da Cookies sich nicht für die Abspeicherung größerer
Datenmengen eignen und ggf. im Browser deaktiviert sind. Serverdateien
lassen auf der anderen Seite keine implizite Zuordnung zu einem
bestimmten Kunden zu. Eine Kundenverwaltung wäre zusätzlich zu
implementieren. Die Werte statischer Variablen bleiben schließlich nur
zwischen Funktionsaufrufen innerhalb derselben PHP-Datei erhalten, aber
nicht zwischen den Aufrufen einer PHP-Datei.
Wie in der Vorlesung erläutert, bietet uns PHP aber die Möglichkeit,
Daten einer Sitzung mittels einer so genannten "Session"
zwischenzuspeichern. Durch das Starten einer Session erhält der
jeweilige Besucher eine eindeutige ID, die so genannte Session-ID. Diese
wird automatisch vergeben und entweder benutzerseitig in einem Cookie
des Browsers abgelegt oder in der URL übermittelt, sofern beim Besucher
die Benutzung von Cookies im Browser deaktiviert ist.
Passen Sie zunächst die Formatierung der Suchresultate in der
PHP-Datei ihres "Amazone"-Shops so an, dass am Ende einer jeden
Zeile der Ergebnisliste nun zusätzlich ein Link erscheint, mit dem
das zugehörende Buch einem Warenkorb hinzugefügt werden kann. (Abb.
4)
Der Link dient dazu, eine zum Warenkorb gehörende PHP-Datei basket.php
aufzurufen. Die Aufgabe dieses Scripts besteht darin, das
ausgesuchte Buch im Warenkorb abzulegen und danach den momentanen
Inhalt des Warenkorbs anzuzeigen. Zu diesem Zweck wird im Script
eine Sessionvariable erzeugt (s. u.), in der die Daten des Buchs
abgespeichert werden können. Dafür ist es erforderlich, die
Information, welches Buch ausgewählt wurde, in das Script zu
transferieren. Hierfür eignet sich am besten eine Variable mit der
ID, die das Buch in der Datenbank besitzt. Die PHP-Datei wird also
wie folgt aufgerufen:
In diesem Beispiel wird die ID des ausgesuchten Buches der Spalte
"ID" der zum Buch gehörenden Zeile der Ergebnistabelle der
Suchanfrage entnommen. Die Zeile ist im Feld $row
abgelegt. Die ID wird in der Variable buy an basket.php
geliefert.
Die Angabe eines Ziels mit target bewirkt, dass die
Ausgaben der aufgerufenen PHP-Datei in einem Browser-Fenster mit
Namen "Warenkorb" angezeigt werden. Dieses wird geöffnet, wenn es
noch nicht existiert. Auf diese Weise ist die Implementierung einer
Rückkehrfunktion in der aufgerufenen PHP-Datei vermeidbar, da das
alte Browser-Fenster mit der Eingabemaske für Suchanfragen erhalten
bleibt.
In der Datei basket.php wird zunächst mit session_start()
eine Session erzeugt oder wiederhergestellt. Da session_start()
versucht, einen Cookie anzulegen und somit Header-Information
transferiert, ist es wichtig, dass diese Funktion aufgerufen wird,
bevor irgendeine Ausgabe mit echo() aus PHP heraus
erfolgt.
Nach Anlegen der Session wird einer Sessionvariable $_SESSION["basket"]
die in der Variable buy gelieferte Buch-ID als
nächstes Feldelement zugewiesen.
Um den Inhalt des Warenkorbs ausgeben zu können, ist es
erforderlich, die Daten, d. h. Autorname, Buchtitel etc., der
ausgewählten Bücher zu restaurieren, da in der Session nur die IDs
dieser Bücher hinterlegt sind. Nur diese wurden ja an basket.php
übergeben.
Die Buchinformationen lassen sich aus der Buchdatenbank unter den
gegebenen IDs mit einer entsprechenden Suchanfrage wiederherstellen.
Es wird daher zunächst eine Verbindung zum MySQL-Server aufgebaut
und nachfolgend für jedes im Array $_SESSION["basket"]
eingetragene Buch der zur ID des Buches gehörende Datensatz
ausgelesen. Die Daten werden dann wieder - wie in Abbildung 5 und 6
zu sehen - in Tabellenform angezeigt.
Abb.5-6: Warenkorb mit einem und zwei Artikeln
Gestalten Sie ihren Warenkorb wieder mit Hilfe von CSS.