php, PHP Session, PHP Sessions

Navigation
 Startseite
 Fachbücher
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 ICQ Generator
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains und...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte Internetdienstleistungen...
https://www.Artfiles.de
 
 

PHP Sessions

Sie befinden sich: Home > Php > PHP Sessions

In diesem Tutorial möchte ich Ihnen erklären, wie Sie Sessions in PHP benutzen können. Die Sessions werden regelmäßig dazu verwendet, um einen Memberbereich oder Administrationsbereich zu realisieren. Da nur der User einen Zugriff auf die Session bekommt, dem die Session ID bekannt ist. Dadurch ist es möglich individuellen Inhalt für einen User bereitzustellen oder diesen mit einem Passwortschutz zu versehen. In PHP wird über den Befehl session_start() eine neue Session generiert.

Wird den Befehl session_start() die Session ID übergeben, greift der Server auf die hinterlegte Datei zu. Wenn eine Session generiert wird, wird ein Text File unter dem session.save_path generiert. Den Session Save_Path kann man mit dem Befehl session_save_path() ändern. Dazu muss der Befehl vor session_start() ausgeführt werden. Dieses Text File wird unter den Dateinamen Prefix „sess_“ und 32 zufällige Zeichen gespeichert. Die 32 Zeichen ist die aktuelle Session ID, dadurch weiß der Server, welche Datei genutzt werden soll. In diesem Text File werden alle Variablen serialsiert gespeichert, die in der aktuellen Session generiert wurden.

Eine Session ist standardmäßig 180 Minuten aktiv, wenn bis dahin die Session nicht wieder benutzt wurde, wird standardmäßig das Text File der Session gelöscht. Dies ist abhängig von der Einstellung in der php.ini unter session.cache_expire. Der Wert session.cache_expire definiert die Ablaufzeit der Session. Man kann auf Wunsch mit new_cache_expire() diesen Wert ändern.

So nun ein Beispiel zum Starten einer Session:

<?php
session_start();
?>

Der Befehl session_start() sollte immer in der ersten Zeile eines PHP Scriptes stehen. Der Befehl session_start() gibt true oder false zurück. Sollte die Session nicht gestartet werden können, wird ein false zurückgegeben. Zusätzlich muss der Befehl vor dem Senden des Http Header vom Dokument ausgeführt werden, da ansonsten eine entsprechende Fehlermeldung kommt und nicht auf die Session zugegriffen werden kann. Daher ist es empfehlenswert, mit dem Befehl headers_sent() zu prüfen, ob der http Header bereits gesendet wurde.

 

Früher haben wir an dieser Stelle empfohlen, ein @-Zeichen vor session_start() zu schreiben. Dies gilt aber, als eine unsaubere Lösung ohne den Fehler ordentlich zu behandeln. Daher empfiehlt sich bei ein Entwicklungssystem kein @-Zeichen zu verwenden. Da dies die Fehlerausgabe unterbindet.

Generell gilt die Regel bei Produktivsystemen, es dürfen keine Fehlermeldungen ausgegeben werden. Die Fehlermeldung muss in den Logs geschrieben werden. Um zu prüfen, ob bereits der Header gesendet wurde, empfehle ich eine try, Catch Lösung.

Es empfiehlt sich generell zu prüfen, ob der Header gesendet wurde. Sollte dieser bereits gesendet worden sein, kann man eine throw new Exception() werfen und später die Fehlermeldung ausgeben ohne systemrelevante Informationen.

Beispiel zum Prüfen, ob bereits ein http Header gesendet wurde:

<?php
// prüfen ob der HTTP header bereits gesendet wurde
if (headers_sent() == false) {
// HTTP header wurde noch nicht gesendet
session_start();
}
?>

Nachdem wir nun die Session initialisiert haben, können wir damit beginnen, diese mit Inhalt zu befüllen. Hierzu nutzen wir die Servervariable $_SESSION, in dieser werden sogenannte Array Elemente abgelegt. Wenn wir jetzt ein neuer Schlüssel mit einem Wert generieren möchten, müssen wir folgendermaßen die Servervariable ansprechen.

<?php
if (headers_sent() == false) {
session_start();
/* Nun erstellen wir in der Session ein Schlüssel mit einen Wert */
$_SESSION['username'] = 'Nico Schubert';
}
?>


Wie oben in unserem Beispiel geschrieben, haben wir den Schlüssel „username“ mit dem Wert „Nico Schubert“ in unserer Session Array: $_SESSION gespeichert. Wenn der Browser Cookies zulässt, wird jetzt ein Cookie mit der Session ID gespeichert. Jedoch könnten wir in einer weiteren Seite mit diesem Schlüssel den Inhalt der Session ausgeben. Da nicht immer sichergestellt werden kann, dass die Session ID per Cookie gespeichert wird. Sollte man die Session ID über die Konstante SID oder session_id() per GET oder POST übergeben?

Hier das Beispiel für die Ausgabe: (Anm.: Bitte speichern Sie die Datei mit dem Dateinamen: seite2.php)

<?php
if (headers_sent() == false) {
if (!isset($_GET['PHPSESSID'])) $_GET['PHPSESSID'] = '';
if ($_GET['PHPSESSID'] != '') {
session_start($_GET['PHPSESSID']);
} else {
session_start();
}
if (!isset($_SESSION['username'])) $_SESSION['username']
= '';
if ($_SESSION['username'] != '') {
echo 'Ihr Benutzername ist: '.$_SESSION['username'];
} else {
echo 'Es konnte kein Benutzernamer ermittelt werden.';
}
}
?>

Erklärung: In der ersten Zeile prüfen wir, ob bereits der HTTP Header gesendet wurde. Wenn dieser noch nicht gesendet wurde, prüfen wir mit isset(), ob die GET Variable: $_GET['PHPSESSID'] gesetzt wurde, ansonsten machen wir diese Variable dem PHP Script bekannt. In der nächsten Zeile prüfen wir, ob die Variable: $_GET['PHPSESSID'] einen Wert enthält. Wenn die Variable einen Wert enthält, starten wir in der nächsten Zeile mit diesem Wert unserer Session.

Sollte kein Wert in $_GET['PHPSESSID'] enthalten sein, starten wir normal ohne Übergabe der Session ID, die Session. Im nächsten Abschnitt prüfen wir, ob die Variable: $_SESSION['username'] bereits einen Wert enthält, ansonsten machen mir diese Variable den PHP Script bekannt. Nun prüfen wir, ob die Variable: $_SESSION['username'] einen Wert enthält und geben diesen Wert aus.

Hinweis: Man sollte bei diesem Beispiel eine IP Überprüfung einbauen, da ansonsten jeder auf die Session zugreifen kann. Empfehlenswert wäre, die IP-Adresse in der Session zu speichern und dann wieder zu prüfen, ob diese existiert.

Es wird hier erklärt, wie man in PHP eine IP-Adresse ermittelt. Anschließend prüft man mit einer sogenannten IF-Anweisung, ob die IP-Adresse in der Session enthalten ist. Zusätzlich kann man mit session_regenerate_id() auch vereinzelt im Scriptlauf die Session ID mal ändern, dies erhöht die Sicherheit.

Wenn Sie die Sessionvariable wieder löschen möchten, können Sie hierzu unset() oder session_destroy() verwenden. Sie können das gesamte Transport Script hier herunterladen.

Soweit alles klar? Wenn ja, so können Sie hier das nächste Thema anfangen. Dabei geht es darum, einen lokalen Entwicklungsserver einrichten.