Session-Funktionen
PHP Manual

session_set_save_handler

(PHP 4, PHP 5, PHP 7)

session_set_save_handlerSetzt benutzerdefinierte Session-Speicherfunktionen

Beschreibung

bool session_set_save_handler ( callback $open , callback $close , callback $read , callback $write , callback $destroy , callback $gc )
bool session_set_save_handler ( SessionHandlerInterface $sessionhandler [, bool $register_shutdown = true ] )

session_set_save_handler() setzt die benutzerdefinierten Session-Speicherfunktionen, die zur Speicherung und Wiederherstellung von zur Session gehörigen Daten verwendet werden. Dies ist äußerst nützlich, wenn eine andere als die mit PHP-Sessions zur Verfügung stehende Art der Speicherung, z.B. die Speicherung der Session-Daten in einer lokalen Datenbank, bevorzugt wird.

Parameter-Liste

Diese Funktion hat zwei Prototypen.

sessionhandler

Ein Exemplar einer Klasse die SessionHandlerInterface implementiert, wie beispielsweise SessionHandler, das als benutzerdefinierte Session-Speicherfunktion registriert werden soll.

register_shutdown

Registriert session_register_shutdown() als eine register_shutdown_function() Funktion.

oder
open

Die öffnen-Routine funktionert wie ein Konstruktor in einer Klasse und wird ausgeführt, wenn die Session geöffnet wird. Sie erwartet zwei Parameter: als Ersten den Speicherpfad und als Zweiten den Namen der Session.

close

Die schließen-Routine funktionert wie ein Destruktor in einer Klasse und wird am Ende der Session ausgeführt.

read

Damit die Speicherroutine funktioniert wie erwartet, muss die lesen-Routine immer eine Zeichenkette zurückgeben. Wenn es keine Daten zu lesen gibt, geben Sie eine leere Zeichenkette zurück. Rückgabewerte anderer Routinen werden in boolesche Ausdrücke umgewandelt. TRUE für einen Erfolg, FALSE für einen Fehler.

write

Die schreiben-Routine, die aufgerufen wird, wenn Session-Daten gespeichert werden sollen. Diese Funktion erwartet zwei Parameter: eine Session-ID und die zugehörigen Daten.

Hinweis:

Die schreiben-Routine wird nicht ausgeführt, bevor die Ausgabe abgeschlossen ist. Deshalb werden auch niemals Fehlermeldungen der schreiben-Routine im Browser erscheinen. Wenn die Ausgabe von Fehlermeldungen nötig ist, sollte diese stattdessen in eine Datei geschrieben werden.

destroy

Die löschen-Routine wird ausgeführt, wenn eine Session mittels session_destroy() gelöscht wird. Sie erwartet die Session-ID als einzigen Parameter.

gc

Der Speicherbereiniger (garbage collector) wird ausgeführt, wenn der Session-Speicherbereiniger ausgeführt wird. Er erwartet die maximale Session-Verfallszeit als einzigen Parameter.

Rückgabewerte

Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.

Beispiele

Beispiel #1 session_set_save_handler() Beispiel

Das folgende Beispiel liefert eine dateibasierte Session-Speicherung, die der Standard-Speicherroutine files der PHP-Sessions ähnlich ist. Dieses Beispiel kann problemlos erweitert werden, dass es Datenbank-Speicherung mittels ihrer bevorzugten PHP-gestützten Datenbank beinhaltet.

<?php
function oeffne($speicherpfad$session_name)
{
  global 
$sess_speicherpfad;

  
$sess_speicherpfad $speicherpfad;
  return(
true);
}

function 
schliesse()
{
  return(
true);
}

function 
lese($id)
{
  global 
$sess_speicherpfad;

  
$sess_datei "$sess_speicherpfad/sess_$id";
  return (string) @
file_get_contents($sess_datei);
}

function 
schreibe($id$sess_daten)
{
  global 
$sess_speicherpfad;

  
$sess_datei "$sess_speicherpfad/sess_$id";
  if (
$fp = @fopen($sess_datei"w")) {
    
$return fwrite($fp$sess_daten);
    
fclose($fp);
    return 
$return;
  } else {
    return(
false);
  }
}

function 
loesche($id)
{
  global 
$sess_speicherpfad;

  
$sess_datei "$sess_speicherpfad/sess_$id";
  return(@
unlink($sess_datei));
}

function 
gc($maxlifetime)
{
  global 
$sess_speicherpfad;

  foreach (
glob("$sess_speicherpfad/sess_*") as $dateiname) {
    if (
filemtime($dateiname) + $maxlifetime time()) {
      @
unlink($dateiname);
    }
  }
  return 
true;
}

session_set_save_handler("oeffne""schliesse""lese""schreibe""loesche""gc");

session_start();

// verfahren Sie mit Sessions wie gewohnt
?>

Beispiel #2 session_set_save_handler() mit Verwendung von SessionHandler

<?php
class MySessionHandler extends SessionHandler {
  public function 
open($save_path$sessionid)
  {
    global 
$sess_save_path;

    
$sess_save_path $save_path;
    return(
true);
  }
  public function 
close()
  {
    return 
true;
  }
  public function 
read($sessionid)
  {
    global 
$sess_save_path;

    
$sess_file "$sess_save_path/sess_$id";
    return (string) @
file_get_contents($sess_file);
  }
  public function 
write($sessionid$sessiondata)
  {
    global 
$sess_save_path;

    
$sess_file "$sess_save_path/sess_$id";
    if (
$fp = @fopen($sess_file"w")) {
      
$return fwrite($fp$sess_data);
      
fclose($fp);
      return 
$return;
    } else {
      return(
false);
    }
  }
  public function 
destroy($sessionid)
  {
    global 
$sess_save_path;

    
$sess_file "$sess_save_path/sess_$id";
    return(@
unlink($sess_file));
  }
  public function 
gc($maxlifetime)
  {
    global 
$sess_save_path;

    foreach (
glob("$sess_save_path/sess_*") as $filename) {
      if (
filemtime($filename) + $maxlifetime time()) {
        @
unlink($filename);
      }
    }
    return 
true;
  }
}

$handler = new MySessionHandler();
session_set_save_handler($handler);

session_start();
?>

Anmerkungen

Warnung

Ab PHP 5.0.5 werden die Routinen write und close nach dem Zerstören von Objekten aufgerufen und können deshalb keine Objekte verwenden oder Exceptions (Fehler-, Ausnahmesituationen) auslösen. Objekt-Destruktoren können aber Sessions verwenden.

Es ist möglich, session_write_close() über den Destruktor aufzurufen, um dieses Henne-Ei Problem zu lösen.

Warnung

Bei manchen SAPIs ändert sich das aktuelle Arbeitsverzeichnis, falls die Session durch die Beendigung des Skripts geschlossen wird. Mittels session_write_close() ist es möglich, die Session schon früher zu schließen.

Changelog

Version Beschreibung
5.4.0 SessionHandlerInterface und SessionHandler zum Implementieren von benutzerdefinierten Session-Speicherfunktionen hinzugefügt.

Siehe auch


Session-Funktionen
PHP Manual