Suchen
Inside Wiki
Nützliche Links
phpforum.de Tipp
 
phpforum.de bei Facebook
 
phpforum.de bei Twitter
 

Zurück   PHP Forum: phpforum.de > phpforum.de Wiki > phpforum.de Wiki

PHP Wiki Dieses Wiki sammelt Lösungen, zu Problemen, welche immer wieder im Forum auftauchen.

 
 
Artikel-Optionen Ansicht
  #1  

Standard Session Grundfunktion

 

Tutorials - Inhalte

Ab wann lohnt sich der Einsatz von Sessions?


Eigentlich immer, wenn benutzerbezogene Daten, über mehrere Seitenaufrufe hinweg, mitgeschleppt werden sollen:
  • Viele Login systeme basieren auf Sessions in Verbindung mit MySQL
  • Mehrseitige Formulare sollen verarbeitet werden



Vorbedingungen für den Umgang mit Sessions


Bei der Sessionverwaltung hat sich im Laufe der Jahre viel verändert. In diesem Tutorial wird davon ausgegangen, daß mit einer PHP Version 4.3 oder größer gearbeitet wird.
  1. session_is_registered
  2. session_register
  3. session_unregister
Alle drei sind veraltet und sollten nicht mehr verwendet werden, weil sie nur mit register_globals=On funktionieren.
  • Register Globals
  • Auch dein Provider wird umstellen!
  • Spätestens PHP6 macht damit endgültig Schluss.

Doku: PHP Referenz <<<-- lesen



Ein einfaches Kochrezept für den Umgang mit Sessions


Wenn wir Sessions nutzen wollen, gehört an den Anfang der Datei unbedingt session_start(). Erst danach erhalten wir Zugriff auf die gespeicherten Session-Daten. Auch werden dann unsere Daten automatisch am Ende des Scriptes auf dem Server gespeichert.

Datei1:
PHP Quellcode:
// Eine Session Variable anlegen und mit Daten füllen
session_start();
$_SESSION['test']  = 1234;



Datei2:
PHP Quellcode:
session_start();
// Eine Session Variable auslesen
echo $_SESSION['test'];



Datei3:
PHP Quellcode:
// Prüfen ob unsere Session Variable gesetzt ist:
session_start();
if (isset($_SESSION['test'])) echo 'Ja ist gesetzt!';


Datei4:
PHP Quellcode:
// Eine Session Variable löschen:
session_start();
unset($_SESSION['test']);


Datei5:
PHP Quellcode:
// Anzeige der Session-ID:
session_start();
echo 'session_id: '.session_id().'<br>';


Datei6:
PHP Quellcode:
// Um eine Session zu resetten(ausloggen) reicht im prinzip:
session_start();
$_SESSION = array();

Noch ein wenig konsequenter ist das Beispiel in der: session_destroy() Doku

Datei7:
PHP Quellcode:
// Um eine Session nur zu starten, wenn noch keine gestartet wurde:
if('' == session_id()) session_start();




Bei Problemchen


Doku: PHP Referenz <<<-- lesen
Beim debuggen sollte Folgendes immer am Anfang der Problem-Datei stehen:

PHP Quellcode:
// Debug Meldungen einschalten
error_reporting(-1);
ini_set('display_errors', TRUE);

// und dann erst
session_start();

Es ist hilfreich sich, beim debuggen, die Session ID anzeigen zu lassen. Datei5 zeigt wie es gemacht werden kann.

Fehler: "Cannot send session cache limiter" und "Cannot send session cookie"


Häufigste Ursache:
Gemeine Falle:
Mancher Editor klebt, im Unicode Modus, eine BOM an den Anfang des Scriptes. Diese "Byte Order Mark" ist leider nicht in jedem Editor sichtbar.

Ein Hexeditor kann ungemein hilfreich sein, um diesen Fehler zu finden.


Die Variable "test" wird nicht übergeben.


Huch, keine Fehlermeldung und die Session-ID wechselt bei jedem Aufruf ?
Mögliche Ursachen:
  • Debuggen nicht gelesen
  • session_start() vergessen
  • Schon gesendete Header verhindern das Setzen des Cookies
  • Der Browser unterstützt keine Cookies
  • Die Einstellungen in der php.ini verhindern die SID Übergabe.
  • Der IE glänzt mit dem External Link P3P Problem




Ich will, daß meine Sessions auch ohne Cookies funktionieren!


Wahlweise:
  1. php.ini Einstellungen
  2. Konfigurieren
  3. Per ini_set() einstellen
  4. output_add_rewrite_var()
  5. händisch die Konstante "SID" an die Links anhängen, notwendig bei z.B. Location Headern
Weg3:
PHP Quellcode:
ini_set('session.use_cookies',1);
ini_set('session.use_only_cookies',0);
ini_set('session.use_trans_sid',1);

// und dann erst:
session_start();


Weg4:
PHP Quellcode:


Und Zack, wenn kein Cookie gesetzt, dann wird die Session ID automatisch an alle relativen Links angehangen und als Hidden-Field in Formularen eingefügt.




Ein paar Worte zur Sicherheit


Warnung:
Wird die SID in der URL transportiert, kann sie versehendlich per E-Mail oder in Foren publiziert werden. Dann können völlig Fremde die begonnene Session weiterführen.

Also nach Möglichkeit, die Übergabe per Cookie erzwingen:
PHP Quellcode:
ini_set('session.use_cookies',1);
ini_set('session.use_only_cookies',1);
ini_set('session.use_trans_sid',0);

// und dann erst:
session_start();

Siehe dazu: Session Sicherheit in Sicherheit

Sehr gut: Verwende HTTPS bzw. SSL !!
Manche schwören auf:
Nach dem Einloggen oder gar bei jedem Request session_regenerate_id()
PHP Quellcode:
// nach jedem
session_start();

if (isset($_COOKIE[session_name()]))
{ // Würde bei trans_sid den Reloadbutton kaputt machen
    session_regenerate_id(TRUE); // SID Wechseln
}





Links zu diesem Thema


Stichwort: session
Session Sicherheit in Sicherheit
http://de.wikipedia.org/wiki/Session_Hijacking
http://de.wikipedia.org/wiki/Session_Fixation
http://www.acros.si/papers/session_fixation.pdf

Zum dritten mal: PHP Referenz damit du es wirklich nicht übersiehst
http://aktuell.de.selfhtml.org/artik...stem/index.htm
http://www.php-einfach.de/einf_php_sessions.php
http://www.develnet.org/26.html
http://www.php-faq.de/ch/ch-version4_session.html
http://www.netcode.net/tutorials/php...o_sessions.php

« Vorheriges Kapitel   Tutorials
  Nächstes Kapitel »

Mitwirkende: combie
Erstellt von combie, 15.06.2008 am 16:34
Zuletzt bearbeitet von combie, 29.10.2009 am 22:22
0 Kommentare , 16676 Betrachtungen

Dieser Text steht unter der GNU-Lizenz für freie Dokumentation


 

Lesezeichen

Stichworte
grundlagen, session

Artikel-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu
Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Warning: session_start() [function.session-start]: Cannot send session cache limiter MisterDeeds PHP 9 31.03.2008 15:29
apache->VHOST - php session problem - immer neue session id djrace Administration 3 05.02.2008 20:59
Cannot send session..headers already sent -- session steht ganz oben pogoist PHP 13 31.03.2007 09:57
Session löschen für logout und Session überprüfen für login souldarkengel PHP 25 30.03.2006 07:41
Probleme mit session cookie und session cache limiter Mag78 PHP 4 20.07.2005 20:34


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:29 Uhr.


Powered by vBulletin® Version 3.8.8 (Deutsch)
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
Powered by NuWiki v1.3 RC1 Copyright ©2006-2007, NuHit, LLC