Cookies sind kleine Textdateien die am PC des Clients gespeichert
werden . Cookies sind vorallem zum Speichern von userspezifischen
Daten die man nicht am Server speichern möchte geeignet.
Mit der Funktion setcookie() wird ein Cookie im Dateisystem des
Client gespeichert:
// setcookie(name, value, expires, path, domain, secure);
setcookie("cookiename", "zu speichernde Daten ", time()+3600,
"/");
| Funktion |
Beschreibung |
| name |
Name des Cookies |
| value |
die zu speichernden Daten |
| expires |
Verfallsdatum des Cookies |
| path |
legt fest welcher Pfad das abgelegte Cookie wieder lesen
darf |
| domain |
legt die Domain fest, die dieses Cookie auslesen kann |
| secure |
beschränkt den Cookie auf SSL-Verbindungen |
Wichtig! Cookies müssen immer gesetzt werden bevor HTML-Code
an den Browser ausgegeben wird. Das Cookie wird im Header der
Datei mitgeschickt. Falls davor schon Daten geschickt wurden kann
kein Cookie mehr gesetzt werden. PHP gibt eine Fehlermeldung aus.
Um ein Cookie wieder auszulesen kann man es als Variable mit seinem Namen
ansprechen. Im Beispiel unten also $_COOKIE['besuche'].
setcookie("besuche", "2910");
if(isset($_COOKIE['besuche']))
echo "Besuche = $_COOKIE['besuche']";
Zuster prüfen wir mittels isset() ob ein Cookie existiert, gesetzt
wurde. Ist dies der Fall können wir die gespeicherten Wert mit echo
$_COOKIE['besuche'] ausgeben.
Mehrere Variablen in Cookies speichern
Um mehrere Informationen in einem Cookie speichern zu können,
setzt man diese einfach zu einem String zusammen und separiert
sie mittels eindeutigen Trennzeichen.
Liegen die Daten als Arrays vor, dann bietet sich die Funktion
implode() an, um sie zu einem String zusammenzufassen. Einzelne
Variablen werden mit dem Punktoperator zusammengeschlossen..
<?php
if(isset($_COOKIE["myCookie"]))
{
$liste = explode("§§", $_COOKIE["myCookie"]);
$name = $liste[0] ;
$remain = round(60 - ((time() - $liste[1])/ 60));
echo "Hallo $name!<br />";
echo "In $remain Minuten wird das Cookie gelöscht.";
}
else
{
if(isset($_POST["name"]))
{
$expires = time() + 3600;
$zeit = time();
$value = $_POST["name"] . "§§" . $_POST["zeit"];
setCookie("meinCookie", $value , $expires, "", "", FALSE);
echo "Cookie wurde gesetzt";
}
else
{
echo "<form action=\"" . $_SERVER["PHP_SELF"] . "\" method=\"post\">";
echo "Name:<br /><input name=\"name\" />";
echo "<input tpye=\"submit\" value=\"go\" />";
echo "</form>";
}
}
?>
Übung K1
Falls noch kein Cookie gesetzt wurde soll ein Formular
zur Namenseingabe erscheinen. Falls bereits ein Cookie gesetzt
wurde soll folgender Text ausgegeben werden: Hallo "DeinName"!
Du bist bereits x mal hiergewesen! Dabei soll bei jedem
neuen Aufruf der Seite der Zähler um eins erhöht
werden. Probier das ganze einfach unten aus!
Lösung
|
Session
Das http-Protokoll bietet keine Möglichkeit verschiedene Anfragen
vom gleichen Browser zu verbinden. Für einen Warenkorb oder ähnliches
ist es aber notwendig dass der Server den Client von dem eine neue Seite
angefordert wird "wiedererkennt".
Mittels Session kann nun der Webserver verschiedene Anfragen
von einem User in Beziehung zueinander setzen. Um den Client wiederzuerkennen
weist PHP diesem eine eindeutige Session-ID zu, mit der sich der
Client am Server "ausweisen" kann.
Genau wie beim Cookie stehen auch bei der Session alle registrierten
Variablen jedem Script zu Verfügung.
Sessions mit PHP
Mittels session_start() wird eine Session begonnen - mittels
session_register() werden Variablen in dieser Session registriert
und sind daher für alle Scripts aufrufbar.
Funktionen für die Session-Verwaltung
| Funktion |
Beschreibung |
| session_start() |
startet eine Session im Skript |
| session_destroy() |
löscht aktuelle Session und alle Daten |
| session_name() |
gibt den Namen der Session zurück |
| session_id() |
gibt die Session-ID zurück |
| session_register() |
registriert eine Variable in der Session |
| session_unregister() |
löscht eine Variable aus der Session |
| session_is_registered() |
überprüft eine Variable, ob sie in der Session
gespeichert ist. Gibt TRUE oder FALSE zurück. |
| session_unset() |
löscht alle Variablen aus der Session |
Achtung! Bei den Funktionen session_register(), session_unregister()
und session_is_registered() darf nur der Name als Argument übergeben
werden (Dolllarzeichen wird weggelassen).
$daten = "Meine Daten";
session_register("daten");
if(session_is_registered("daten"))
{
echo $_SESSION["daten"];
}
Ein Beispiel
Um die Session-Verwaltung ausprobieren zu können, benötigen
wir mehrere Datein, die immer wieder auf die aktuelle Session
zugreifen. Das Beispiel ist aus dem Buch: Dirk Ammelburger, Goto
PHP4 2002.
Die erste Datei dient dazu, dass der User seinen Namen eingeben
kann, die Session gestartet wird und die Startzeit in der Session
registriert wird.
<?php
//Session wird gestartet!
session_start();
//Ausgabe der Daten!
echo "Sie haben die Session-ID: " . session_id();
echo "<br />";
echo "Ihr Sessionname lautet: " . session_name();
echo "<br />";
//Startzeitpunkt wird festgestellt und registriert!
$startzeit = time();
session_register("startzeit");
?>
<!-- HTML-Formular für den Usernamen -->
Willkommen!<br />
<form action="session_b.php" method="post">
Bitte Namen eingeben:<br />
<input name="name" />
<imput type="submit" value="anmelden" />
</form>
<?php
//Sessiondaten werden überprüft!
if (session_is_registered("startzeit"))
{
echo "Ihre Startzeit wurde erfolgreich registriert!";
}
?>
 
|
session_a.php
<?php
//Session wird gestartet!
session_start();
//Formulardaten werden überpüft!
if($_POST["name"] == "")
{
$_POST["name"] = "nobody";
}
// Begrüßung
echo "Hallo " . $_POST["name"] . "!<br />";
//Zeit auf der Seite wird berechnet und ausgegeben
$dzeit = time() - $_SESSION["startzeit"];
echo "Du bist seit $dzeit Sekunden angemeldet!<br />";
//Daten werden in der Session registriert, wenn nötig!
if(!(session_is_registered("name")))
{
session_register("name");
}
//Ausgabe weiterer Sessiondaten!
if(session_is_registered("lang"))
{
echo "Du möchtest die Sprache " . $_SESSION["lang"] . " lernen!<br /><br />";
}
?>
<!-- HTML-Linkliste -->
<a href="session_c.php?mylang=C">Ich will C lernen!</a><br />
<a href="session_c.php?mylang=PHP">Ich will PHP lernen!</a><br />
<a href="session_c.php?mylang=Java">Ich will Java lernen!</a><br />
<a href="session_d.php">Session verlassen!</a><br />
|
session_b.php
Mittels session_start() wird nun die vorher angelegte Session
wieder angesprochen. Nun steht die Startzeit wieder zur Verfügung
und wir berechnen die Aufenthaltsdauer unseres Users. Außerdem
prüfen wir den eingegebenen Namen.
<?php
//Session wird gestartet!Alle Daten sind wieder vorhanden!
session_start();
//Begrüßung
echo "Hallo " . $_SESSION["name"] . " <br />";
//Zeit auf der Seite wird berechnet und ausgegeben
$dzeit = time() - $_SESSION["startzeit"];
echo "Du bist seit $dzeit Sekunden angemeldet!<br><br>";
//Variablen werden gesetzt!
$lang = $_GET["mylang"];
//Die Session wird überprüft und bei Bedarf aktualisiert!
if (!session_is_registered("lang"))
{
session_register("lang");
}
echo "Sie haben die Sprache " . $_SESSION["lang"] . " gewählt!<br><br>";
?>
<!-- HTML-Link -->
<a href="session_b.php>weiter</a>
|
session_c.php
Wir registrieren die Variable $lang. In diese wird je nach angeklickten
Link eine Programmiersprache geschrieben. Die bei bereits erfolgter
Registrierung auch gleich ausgegeben wird.
Um die Session wieder zu verlassen, zu zerstören klickt
man auf den letzten Link.
<?php
//Session wird gestartet!Alle Daten sind wieder vorhanden!
session_start();
//Begrüßung
echo "Hallo " . $_SESSION["name"] . "<br />";
//Zeit auf der Seite wird berechnet und ausgegeben
$dzeit = time() - $_SESSION["startzeit"];
echo "Du bist sei $dzeit Sekunden angemeldet!<br><br>";
//Session wird beendet!
session_destroy();
echo "Ihre Session wurde beendet!<br>";
?>
<!-- HTML-Link -->
<a href="session_a.php>wieder anmelden</a>
|
session_d.php
In diesem Skript wird die Session zerstört, das heißt
die Session-ID und alle registrierten Variablen werden wieder
gelöscht.

Übung K2
Erstellt von: ingo am 4. 12. 05
Erstelle ein einfaches Login-Script, dass mit Sessions arbeitet. Wobei der Username und das Passwort in einer Datei wie unten dargestellt gespeichert werden sollen.
user1|pwuser1|\r\n
user2|pwuser2|\r\n
Außerdem soll Inhalt einer anderen Datei nur nach erfolgreichem Login sichtbar sein.
Lösung

Nur angemeldete Lehrer können Lösungen sehen!
·:: Zurück weiter ::·