Du bist hier: Tips » Scripte » PHP
PHP
Referenzliste

session_set_save_handler

Session-Funktionen

    Befehl:
bool session_set_save_handler ( callback $open , callback $close , callback $read , callback $write , callback $destroy , callback $gc )

Seit PHP 5.4 ist es möglich, den folgenden Prototyp registrieren:

bool session_set_save_handler ( SessionHandlerInterface $sessionhandler [, bool $register_shutdown = true ] )


    Parameter-Liste:
NameBeschreibung
openDie ö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.
closeDie schliessen-Routine funktionert wie ein Destruktor in einer Klasse und wird am Ende der Session ausgeführt.
readDamit 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.
writeDie 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.
destroyDie löschen-Routine wird ausgeführt, wenn eine Session mittels session_destroy() gelöscht wird. Sie erwartet die Session-ID als einzigen Parameter.
gcDer Speicherbereiniger (garbage collector) wird ausgeführt, wenn der Session-Speicherbereiniger ausgeführt wird. Er erwartet die maximale Session-Verfallszeit als einzigen Parameter.

Seit PHP 5.4 hat es 2 Prototypen-Funktionen:
sessionhandlerEine Instanz einer Klasse Umsetzung SessionHandlerInterface wie SessionHandler, als Session-Handler registrieren. Seit PHP 5.4 nur.
register_shutdownRegister session_write_close() als register_shutdown_function()-Funktion.

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

    Beschreibung:
session_set_save_handler() setzt die benutzerdefinierten Session-Speicherfunktionen, die zur Speicherung und Wiederherstellung von zur Session gehörigen Daten verwendet werden. Dies ist äusserst 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.


    Aktiv in Version:
(PHP 4, PHP 5, PHP 7)

    Warnung:
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.

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 schliessen.

Ab PHP 5.0.5 die Schreib-und Schliess-Handler werden nach Objektzerstörung genannt und kann daher nicht verwenden oder Objekte werfen Ausnahmen. Ausnahmen sind nicht möglich, da erwischt wird nicht gefangen werden, noch wird jede Ausnahme Spur angezeigt werden, und die Ausführung wird nur unerwartet aufhören werden. Die Objekt-Destruktoren können jedoch verwenden Sitzungen.
Es ist möglich, session_write_close() aus der destructor rufen, um dieses Henne-Ei-Problem zu lösen, aber der sicherste Weg ist, um die Shutdown-Funktion, wie oben beschrieben registrieren.

    Siehe auch:
Registrieren Sie eine Funktion zur Ausführung beim Herunterfahren
 
Session-Shutdown-Funktion für PHP 5.4.0 +
 

session_set_save_handler() - Beispiel:


Eingabe:
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
?>


Beschreibung:
Version Beschreibung
5.4.0 Hinzugefügt SessionHandlerInterface für die Umsetzung Sitzung Handler und SessionHandler internen PHP-Session-Handler aus.
session_set_save_handler() - Beispiel 2:


Eingabe:
Der folgende Code ist für PHP Version 5.4.0 und höher. Wir zeigen hier nur den Aufruf gibt, kann die volle beispielsweise in der SessionHandlerInterface synposis oben verwiesen wurde.


<?php
class MySessionHandler implements SessionHandlerInterface
{
    // Schnittstellen implementieren hier
}

$handler = new MySessionHandler();
session_set_save_handler($handler, true);
session_start();

// fahren Sie durch Schlüssel von $_SESSION setzen und zu erhalten Werte
?>


Beschreibung:
Version Beschreibung
5.4.0 Hinzugefügt SessionHandlerInterface für die Umsetzung Sitzung Handler und SessionHandler internen PHP-Session-Handler aus.
Session-Funktionen