<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.session.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'function.session-set-save-handler.php',
    1 => 'session_set_save_handler',
    2 => 'Setzt benutzerdefinierte Session-Speicherfunktionen',
  ),
  'up' => 
  array (
    0 => 'ref.session.php',
    1 => 'Session-Funktionen',
  ),
  'prev' => 
  array (
    0 => 'function.session-set-cookie-params.php',
    1 => 'session_set_cookie_params',
  ),
  'next' => 
  array (
    0 => 'function.session-start.php',
    1 => 'session_start',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'reference/session/functions/session-set-save-handler.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.session-set-save-handler" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">session_set_save_handler</h1>
  <p class="verinfo">(PHP 4, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">session_set_save_handler</span> &mdash; <span class="dc-title">Setzt benutzerdefinierte Session-Speicherfunktionen</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.session-set-save-handler-description">
  <h3 class="title">Beschreibung</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>session_set_save_handler</strong></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> <code class="parameter">$open</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> <code class="parameter">$close</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> <code class="parameter">$read</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> <code class="parameter">$write</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> <code class="parameter">$destroy</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> <code class="parameter">$gc</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> <code class="parameter">$create_sid</code><span class="initializer"> = ?</span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> <code class="parameter">$validate_sid</code><span class="initializer"> = ?</span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> <code class="parameter">$update_timestamp</code><span class="initializer"> = ?</span></span><br>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

  <p class="para rdfs-comment">
   Folgenden Prototypen können registriert werden:
  </p>
  <div class="methodsynopsis dc-description"><span class="methodname"><strong>session_set_save_handler</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.object.php" class="type object">object</a></span> <code class="parameter">$sessionhandler</code></span>, <span class="methodparam"><span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> <code class="parameter">$register_shutdown</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong></span></span>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

  <p class="para rdfs-comment">
   <span class="function"><strong>session_set_save_handler()</strong></span> 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.
  </p>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.session-set-save-handler-parameters">
  <h3 class="title">Parameter-Liste</h3>
  <p class="para">
   Diese Funktion hat zwei Prototypen.
   <dl>
    
     <dt><code class="parameter">sessionhandler</code></dt>
     <dd>
      <p class="para">
       Eine Instanz einer Klasse, die
       <span class="interfacename"><a href="class.sessionhandlerinterface.php" class="interfacename">SessionHandlerInterface</a></span>, und optional
       <span class="interfacename"><a href="class.sessionidinterface.php" class="interfacename">SessionIdInterface</a></span> und/oder
       <span class="interfacename"><a href="class.sessionupdatetimestamphandlerinterface.php" class="interfacename">SessionUpdateTimestampHandlerInterface</a></span>
       implementiert, wie beispielsweise
       <span class="classname"><a href="class.sessionhandler.php" class="classname">SessionHandler</a></span>, die als benutzerdefinierte
       Session-Speicherroutine registriert werden soll.
      </p>
     </dd>
    
    
     <dt><code class="parameter">register_shutdown</code></dt>
     <dd>
      <p class="para">
       Registriert <span class="function"><a href="function.session-write-close.php" class="function">session_write_close()</a></span> als eine
       <span class="function"><a href="function.register-shutdown-function.php" class="function">register_shutdown_function()</a></span>-Funktion.
      </p>
     </dd>
    
   </dl>

   oder

   <dl>
    
     <dt><code class="parameter">open</code></dt>
     <dd>
      <p class="para">
       Ein Callable mit folgender Signatur:
       <div class="methodsynopsis dc-description"><span class="methodname"><span class="replaceable">open</span></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$savePath</code></span>, <span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$sessionName</code></span>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

      </p>
      <p class="para">
       Der open Callback funktionert wie ein Konstruktor in einer Klasse und
       wird ausgeführt, wenn die Session geöffnet wird. Es ist die erste
       Callback-Funktion, die ausgeführt wird, wenn die Session automatisch
       oder manuell durch <span class="function"><a href="function.session-start.php" class="function">session_start()</a></span> gestartet wird.
       Der Rückgabewert ist bei Erfolg <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> und im Fall eines Fehlers
       <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
      </p>
     </dd>
    
    
     <dt><code class="parameter">close</code></dt>
     <dd>
      <p class="para">
       Ein Callable mit folgender Signatur:
       <div class="methodsynopsis dc-description"><span class="methodname"><span class="replaceable">close</span></span>(): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

      </p>
      <p class="para">
       Der close-Callback funktionert wie ein Destruktor in einer Klasse und
       wird ausgeführt nachdem der Session-write-Callback aufgerufen wurde.
       Sie wird ebenfalls aufgerufen, wenn
       <span class="function"><a href="function.session-write-close.php" class="function">session_write_close()</a></span> aufgerufen wurde. Der
       Rückgabewert sollte bei Erfolg <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> sein und im Fall eines Fehlers
       <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
      </p>
     </dd>
    
    
     <dt><code class="parameter">read</code></dt>
     <dd>
      <p class="para">
       Ein Callable mit folgender Signatur:
       <div class="methodsynopsis dc-description"><span class="methodname"><span class="replaceable">read</span></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$sessionId</code></span>): <span class="type"><a href="language.types.string.php" class="type string">string</a></span></div>

      </p>
      <p class="para">
       Der <code class="parameter">read</code>-Callback muss immer eine
       sitzungskodierte (serialisierte) Zeichenkette zurückgeben, oder eine
       leere Zeichenkette, falls keine Daten zu lesen sind.
      </p>
      <p class="para">
       Dieser Callback wird intern von PHP aufgerufen, wenn die Session
       startet, oder wenn <span class="function"><a href="function.session-start.php" class="function">session_start()</a></span> aufgerufen wird.
       Noch bevor dieser Callback aufgerufen wird, wird PHP den
       <code class="parameter">open</code>-Callback ausführen.
      </p>
      <p class="para">
       Der Wert, den dieser Callback zurückgibt, muss in genau demselben
       serialisierten Format vorliegen, das ursprünglich für die Speicherung
       an den <code class="parameter">write</code>-Callback übergeben wurde. Der
       zurückgegebene Wert wird von PHP automatisch deserialisiert, und
       verwendet, um die superglobale <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var>-Variable zu
       initialisieren. Obgleich die Daten ähnlich wie bei
       <span class="function"><a href="function.serialize.php" class="function">serialize()</a></span> aussehen, ist zu beachten, dass es sich
       um ein unterschiedliches Format handelt, das in der Dokumentation zur
       ini-Einstellung
       <a href="session.configuration.php#ini.session.serialize-handler" class="link">session.serialize_handler</a>
       beschrieben wird.
      </p>
     </dd>
    
    
     <dt><code class="parameter">write</code></dt>
     <dd>
      <p class="para">
       Ein Callable mit folgender Signatur:
       <div class="methodsynopsis dc-description"><span class="methodname"><span class="replaceable">write</span></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$sessionId</code></span>, <span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$data</code></span>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

      </p>
      <p class="para">
       Der <code class="parameter">write</code>-Callback wird aufgerufen, wenn die
       Session gespeichert und geschlossen werden muss. Dieser Callback nimmt
       die aktuelle Session-ID und eine serialisierte Version der
       superglobalen <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var>-Variablen entgegen. Die
       intern von PHP verwendete Serialisierungsmethode wird in der
       Dokumentation zur ini-Einstellung
       <a href="session.configuration.php#ini.session.serialize-handler" class="link">session.serialize_handler</a>
       beschrieben.
      </p>
      <p class="para">
       Die serialisierten Session-Daten, die an diesen Callback übergeben
       werden, sollten als zu der übergebenen Session-ID zugehörig
       gespeichert werden. Werden diese Daten wieder gelesen, dann muss der
       <code class="parameter">read</code>-Callback den genauen Wert liefern, der
       ursprünglich an den <code class="parameter">write</code>-Callback übergeben
       wurde.
      </p>
      <p class="para">
       Dieser Callback wird aufgerufen, wenn PHP herunterfährt, oder explizit,
       wenn <span class="function"><a href="function.session-write-close.php" class="function">session_write_close()</a></span> aufgerufen wird. Es ist
       zu beachten, dass PHP intern nach Ausführung dieser Funktion den
       <code class="parameter">close</code>-Callback ausführen wird.
       <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
        <p class="para">
         Die &quot;write&quot;-Routine wird nicht ausgeführt, bevor die Ausgabe
         abgeschlossen ist. Deshalb werden auch niemals Fehlermeldungen der
         &quot;write&quot;-Routine im Browser erscheinen. Wenn die Ausgabe von
         Fehlermeldungen nötig ist, sollte diese stattdessen in eine Datei
         geschrieben werden.
        </p>
       </p></blockquote>
      </p>
     </dd>
    
    
     <dt><code class="parameter">destroy</code></dt>
     <dd>
      <p class="para">
       Ein Callable mit folgender Signatur:
       <div class="methodsynopsis dc-description">
        <span class="methodname"><span class="replaceable">destroy</span></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$sessionId</code></span>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

      </p>
      <p class="para">
       Dieser Callback wird ausgeführt, wenn eine Session duch
       <span class="function"><a href="function.session-destroy.php" class="function">session_destroy()</a></span> oder
       <span class="function"><a href="function.session-regenerate-id.php" class="function">session_regenerate_id()</a></span>, mit dem $destroy-Parameter
       auf <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> gesetzt, zerstört wird. Der Rückgabewert sollte bei Erfolg
       <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> sein und im Fall eines Fehlers <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
      </p>
     </dd>
    
    
     <dt><code class="parameter">gc</code></dt>
     <dd>
      <p class="para">
       Ein Callable mit folgender Signatur:
       <div class="methodsynopsis dc-description"><span class="methodname"><span class="replaceable">gc</span></span>(<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$lifetime</code></span>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

      </p>
      <p class="para">
       Der Garbage-Collection-Callback wird von PHP intern aufgerufen, um alte
       Session-Daten zu löschen. Die Häufigkeit wird durch
       <a href="session.configuration.php#ini.session.gc-probability" class="link">session.gc_probability</a>
       und
       <a href="session.configuration.php#ini.session.gc-divisor" class="link">session.gc_divisor</a>
       gesteuert. Der Wert der Lebensdauer, die diesem Callback übergeben
       wird, kann mit
       <a href="session.configuration.php#ini.session.gc-maxlifetime" class="link">session.gc_maxlifetime</a>
       festgelegt werden. Der Rückgabewert sollte bei Erfolg <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> sein und
       im Fall eines Fehlers <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
      </p>
     </dd>
    
    
     <dt><code class="parameter">create_sid</code></dt>
     <dd>
      <p class="para">
       Ein Callable mit folgender Signatur:
       <div class="methodsynopsis dc-description"><span class="methodname"><span class="replaceable">create_sid</span></span>(): <span class="type"><a href="language.types.string.php" class="type string">string</a></span></div>

      </p>
      <p class="para">
       Dieser Callback wird ausgeführt, wenn eine neue Session-ID benötigt
       wird. Es werden keine Parameter übergeben, und der Rückgabewert sollte
       eine Zeichenkette sein, die eine gültige Session-ID für die Routine
       darstellt.
      </p>
     </dd>
    
    
     <dt><code class="parameter">validate_sid</code></dt>
     <dd>
      <p class="para">
       Ein Callable mit folgender Signatur:
       <div class="methodsynopsis dc-description"><span class="methodname"><span class="replaceable">validate_sid</span></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$key</code></span>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

      </p>
      <p class="para">
       Dieser Callback wird ausgeführt, wenn eine Session gestartet
       werden soll, eine Session-ID bereitgestellt wurde und
       <a href="session.configuration.php#ini.session.use-strict-mode" class="link">session.use_strict_mode</a>
       aktiv ist. <code class="parameter">key</code> ist die zu validierende
       Session-ID. Eine Session-ID is gültig, wenn eine Session mit dieser ID
       bereits existiert. Der Rückgabewert sollte bei Erfolg <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> sein und
       im Fall eines Fehlers <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
      </p>
     </dd>
    
    
     <dt><code class="parameter">update_timestamp</code></dt>
     <dd>
      <p class="para">
       Ein Callable mit folgender Signatur:
       <div class="methodsynopsis dc-description"><span class="methodname"><span class="replaceable">update_timestamp</span></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$key</code></span>, <span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$val</code></span>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

      </p>
      <p class="para">
       Dieser Callback wird ausgeführt, wenn eine Session aktualisiert wird.
       <code class="parameter">key</code> ist die Session-ID,
       <code class="parameter">val</code> sind die Session-Daten. Der Rückgabewert
       sollte bei Erfolg <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> sein und im Fall eines Fehlers <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong>.
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.session-set-save-handler-returnvalues">
  <h3 class="title">Rückgabewerte</h3>
  <p class="para">
   Gibt bei Erfolg <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> zurück. Bei einem Fehler wird <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> zurückgegeben.
  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-function.session-set-save-handler-examples">
  <h3 class="title">Beispiele</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Beispiel #1 
     Benutzerdefierte Session-Routine; der vollständige Code ist bei
     <span class="classname"><a href="class.sessionhandlerinterface.php" class="classname">SessionHandlerInterface</a></span> aufgeführt
    </strong></p>
    <div class="example-contents"><p>
     Hier wird nur der Aufruf gezeigt; der vollständige Beispielcode ist in
     der Dokumentation von <span class="classname"><a href="class.sessionhandlerinterface.php" class="classname">SessionHandlerInterface</a></span> zu
     finden.
    </p></div>
    <div class="example-contents"><p>
     Es ist zu beachten, dass der OOP-Prototyp mit
     <span class="function"><strong>session_set_save_handler()</strong></span> verwendet wird, und dass
     die Shutdown-Funktion unter Verwendung des Parameters flag der Funktion
     registriert wird. Dies wird grundsätzlich empfohlen, wenn Objekte als
     Session-Speicherroutinen registriert werden.
    </p></div>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MySessionHandler </span><span style="color: #007700">implements </span><span style="color: #0000BB">SessionHandlerInterface<br /></span><span style="color: #007700">{<br />    </span><span style="color: #FF8000">// hier wird das Interface implementiert<br /></span><span style="color: #007700">}<br /><br /></span><span style="color: #0000BB">$handler </span><span style="color: #007700">= new </span><span style="color: #0000BB">MySessionHandler</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">session_set_save_handler</span><span style="color: #007700">(</span><span style="color: #0000BB">$handler</span><span style="color: #007700">, </span><span style="color: #0000BB">true</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">session_start</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// fahre fort und setze und hole Werte per Schlüssel von $_SESSION</span></span></code></div>
    </div>

   </div>
  </p>
 </div>


 <div class="refsect1 notes" id="refsect1-function.session-set-save-handler-notes">
  <h3 class="title">Anmerkungen</h3>
  <div class="warning"><strong class="warning">Warnung</strong>
   <p class="para">
    Die Routinen <code class="parameter">write</code> und <code class="parameter">close</code>
    werden nach dem Zerstören von Objekten aufgerufen und können deshalb keine
    Objekte verwenden oder Exceptions (Fehler-, Ausnahmesituationen) auslösen.
    Exceptions können nicht abgefangen werden, und es wird auch kein
    Exception-Trace angezeigt; die Ausführung wird einfach unerwartet
    abgebrochen. Objekt-Destruktoren können aber Sessions verwenden.
   </p>
   <p class="para">
    Es ist möglich, <span class="function"><a href="function.session-write-close.php" class="function">session_write_close()</a></span> über den
    Destruktor aufzurufen, um dieses Henne-Ei-Problem zu lösen, aber der
    verlässlichste Weg ist das Registrieren einer Shutdown-Funktion wie oben
    beschrieben.
   </p>
  </div>
  <div class="warning"><strong class="warning">Warnung</strong>
   <p class="para">
    Bei manchen SAPIs ändert sich das aktuelle Arbeitsverzeichnis, falls die
    Session durch die Beendigung des Skripts geschlossen wird. Mittels
    <span class="function"><a href="function.session-write-close.php" class="function">session_write_close()</a></span> ist es möglich, die Session schon
    früher zu schließen.
   </p>
  </div>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.session-set-save-handler-seealso">
  <h3 class="title">Siehe auch</h3>
  <p class="para">
   <ul class="simplelist">
    <li>
     Die Konfigurationsanweisung
     <a href="session.configuration.php#ini.session.save-handler" class="link">session.save_handler</a>
    </li>
    <li>
     Die Konfigurationsanweisung
     <a href="session.configuration.php#ini.session.serialize-handler" class="link">session.serialize_handler</a>
    </li>
    <li><span class="function"><a href="function.register-shutdown-function.php" class="function" rel="rdfs-seeAlso">register_shutdown_function()</a> - Registriert eine Funktion zur Ausf&uuml;hrung beim Skript-Abschluss</span></li>
    <li><span class="function"><a href="function.session-register-shutdown.php" class="function" rel="rdfs-seeAlso">session_register_shutdown()</a> - Funktion zum Schlie&szlig;en von Sessions</span></li>
    <li>
     Eine vollständige prozedurale Referenzimplementierung kann
     <a href="https://github.com/php/php-src/blob/master/ext/session/tests/save_handler.inc" class="link external">&raquo;&nbsp;save_handler.inc</a>
     entnommen werden
    </li>
   </ul>
  </p>
 </div>


</div><?php manual_footer($setup); ?>