mirror of
https://github.com/php/doc-de.git
synced 2026-04-29 18:03:13 +02:00
e9c131d04d
git-svn-id: https://svn.php.net/repository/phpdoc/de/trunk@78306 c90b9560-bf6c-de11-be94-00142212c4b1
493 lines
17 KiB
XML
493 lines
17 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!-- $Revision: 1.2 $ -->
|
|
<reference id="ref.session">
|
|
<title>Session Funktionen</title>
|
|
<titleabbrev>Sessions</titleabbrev>
|
|
|
|
<partintro>
|
|
<para>
|
|
Die Unterstützung von Sessions in PHP bietet die
|
|
Möglichkeit, bestimmte Daten während einer Folge
|
|
von Aufrufen ihrer Website festzuhalten. Damit können Sie
|
|
persönlichere Applikationen erstellen und Ihre Website
|
|
ansprechender gestalten.
|
|
</para>
|
|
<para>
|
|
Falls sie mit dem Sessionmanagment von PHPLIB vertraut sind,
|
|
werden sie Ähnlichkeiten zu PHP's Session-Unterstützung
|
|
feststellen.
|
|
</para>
|
|
<para>
|
|
Einem Besucher wird beim Aufruf ihrer Website eine einzigartige
|
|
ID, die sogenannte Session-ID, zugeordnet. Diese wird entweder
|
|
benutzerseitig in einem Cookie abgelegt oder in der URL
|
|
übermittelt.
|
|
</para>
|
|
<para>
|
|
Die Unterstützung von Sessions erlaubt Ihnen, eine beliebige
|
|
Anzahl von Variablen zu registrieren und diese über Anfragen
|
|
hinweg zu erhalten. Wenn ein Besucher Ihre Website aufruft,
|
|
überprüft PHP automatisch (falls session.auto_start auf
|
|
1 gesetzt ist) oder auf Anfrage (explizit durch
|
|
<function>session_start</function> oder implizit durch
|
|
<function>session_register</function>), ob mit der Anfrage schon
|
|
eine bestimmte Session-ID gesendet wurde. Wenn dies der Fall ist,
|
|
wird die zuvor gespeicherte Umgebung wiederhergestellt.
|
|
</para>
|
|
<para>
|
|
Alle registrierten Variablen werden serialisiert, nachdem die
|
|
Anfrage beendet ist. Registrierte Variablen, die nicht definiert
|
|
sind, werden als nicht definiert gekennzeichnet. Auch bei
|
|
darauffolgenden Zugriffen werden sie nicht vom Session-Modul
|
|
definiert, außer der Benutzer definiert sie später.
|
|
</para>
|
|
<para>
|
|
Die Konfigurationseinstellungen von
|
|
<link linkend="ini.track-vars"><literal>track_vars</literal></link>
|
|
und
|
|
<link linkend="ini.register-globals"><literal>register_globals</literal></link>
|
|
beeinflussen, wie die Session-Variablen gespeichert und
|
|
wiederhergestellt werden.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Seit PHP 4.0.3 ist
|
|
<link linkend="ini.track-vars"><literal>track_vars</literal></link>
|
|
immer aktiviert.
|
|
</para>
|
|
</note>
|
|
<note>
|
|
<para>
|
|
Seit PHP 4.1.0 steht <varname>$_SESSION</varname> genau wie
|
|
<varname>$_POST</varname>, <varname>$_GET</varname>,
|
|
<varname>$_REQUEST</varname> und so weiter, als globale Variable
|
|
zur Verfügung. Im Gegensatz zu
|
|
<varname>$HTTP_SESSION_VARS</varname> ist
|
|
<varname>$_SESSION</varname> immer global. Deshalb sollte
|
|
<literal>global</literal> nicht für <varname>$_SESSION</varname>
|
|
verwendet werden.
|
|
</para>
|
|
</note>
|
|
<para>
|
|
Falls
|
|
<link linkend="ini.track-vars"><literal>track_vars</literal></link>
|
|
aktiviert und
|
|
<link linkend="ini.register-globals"><literal>register_globals</literal></link>
|
|
deaktiviert ist, können nur Bestandteile des globalen assoziativen
|
|
Arrays <varname>$HTTP_SESSION_VARS</varname> als Session-Variablen
|
|
registriert werden. Wiederhergestellte Session-Variablen stehen
|
|
nur im Array <varname>$HTTP_SESSION_VARS</varname> zur Verfügung.
|
|
<example>
|
|
<title>
|
|
Registrierung einer Variablen bei aktiviertem
|
|
<link linkend="ini.track-vars"><literal>track_vars</literal></link>
|
|
</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
if (isset($HTTP_SESSION_VARS['zaehler'])) {
|
|
$HTTP_SESSION_VARS['zaehler']++;
|
|
}
|
|
else {
|
|
$HTTP_SESSION_VARS['zaehler'] = 0;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Aus Gründen der Sicherheit und der Lesbarkeit des Codes wird die
|
|
Verwendung von <varname>$_SESSION</varname> (oder
|
|
<varname>$HTTP_SESSION_VARS</varname> bei PHP 4.0.6 oder
|
|
niedriger) empfohlen. Mit <varname>$_SESSION</varname> oder
|
|
<varname>$HTTP_SESSION_VARS</varname> werden die Funktionen
|
|
session_register()/session_unregister()/session_is_registered()
|
|
nicht benötigt. Der Benutzer kann auf die Session-Variable wie auf
|
|
eine normale Variable zugreifen.
|
|
<example>
|
|
<title>
|
|
Registrierung einer Variablen mit $_SESSION.
|
|
</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
// Verwenden Sie bei PHP 4.0.6 oder niedriger $HTTP_SESSION_VARS
|
|
if (!isset($_SESSION['zaehler'])) {
|
|
$_SESSION['zaehler'] = 0;
|
|
}
|
|
else {
|
|
$_SESSION['zarhler']++;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
<example>
|
|
<title>
|
|
Aufheben der Registrierung einer Variablen mit $_SESSION.
|
|
</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
// Verwenden Sie bei PHP 4.0.6 oder niedriger $HTTP_SESSION_VARS
|
|
unset($_SESSION['zaehler']);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Wenn
|
|
<link linkend="ini.register-globals"><literal>register_globals</literal></link>
|
|
aktiviert ist, können alle globalen Variablen als
|
|
Session-Variablen registriert werden und die Session-Variablen
|
|
werden als entsprechende globale Variablen wiederhergestellt.
|
|
Da PHP wissen muss, welche globalen Variablen als
|
|
Session-Variablen registriert sind, muss der Benutzer Variablen mit
|
|
der Funktion session_register() registrieren, während
|
|
<varname>$HTTP_SESSION_VARS</varname>/<varname>$_SESSION</varname>
|
|
die Verwendung von session_register() nicht benötigt.
|
|
<caution>
|
|
<para>
|
|
Wenn Sie
|
|
<varname>$HTTP_SESSION_VARS</varname>/<varname>$_SESSION</varname>
|
|
verwenden und <link
|
|
linkend="ini.register-globals"><literal>register_globals</literal></link>
|
|
deaktivieren, sollten Sie <function>session_register</function>,
|
|
<function>session_is_registered</function> und
|
|
<function>session_unregister</function> nicht verwenden.
|
|
</para>
|
|
<para>
|
|
Wenn sie <link
|
|
linkend="ini.register-globals"><literal>register_globals</literal></link> aktivieren, sollten Sie <function>session_unregister</function>
|
|
verwenden, weil beim Deserialisieren von Session-Daten die
|
|
Session-Variablen als globale Variablen registriert werden. Die
|
|
Deaktivierung von
|
|
<link
|
|
linkend="ini.register-globals"><literal>register_globals</literal></link>
|
|
ist sowohl aus Sicherheitsgründen als auch wegen
|
|
der Performance empfehlenswert.
|
|
</para>
|
|
</caution>
|
|
<example>
|
|
<title>
|
|
Registrierung einer Variablen bei aktiviertem
|
|
<link linkend="ini.register-globals"><literal>register_globals</literal></link>
|
|
</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
if (!session_is_registered('zaehler')) {
|
|
session_register("zaehler");
|
|
$zaehler = 0;
|
|
}
|
|
else {
|
|
$zaehler++;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Wenn sowohl
|
|
<link linkend="ini.track-vars"><literal>track_vars</literal></link>
|
|
als auch
|
|
<link linkend="ini.register-globals"><literal>register_globals</literal></link>
|
|
aktiviert sind, dann referenzieren die globalen Variablen und die
|
|
Einträge von
|
|
<varname>$HTTP_SESSION_VARS</varname>/<varname>$_SESSION</varname>
|
|
für bereits registrierte Variablen den selben Wert.
|
|
</para>
|
|
<para>
|
|
Wenn der Benutzer session_register() verwendet, um eine
|
|
Session-Variable zu registrieren, befindet sich diese Variable
|
|
nicht vor dem nächsten Laden aus dem Sessionspeicher (d.h. bei der
|
|
nächsten Anfrage) im Array von
|
|
<varname>$HTTP_SESSION_VARS</varname>/<varname>$_SESSION</varname>.
|
|
</para>
|
|
<para>
|
|
Es gibt zwei Methoden, eine Session-ID zu übermitteln:
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
Cookies
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
URL Parameter
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
<para>
|
|
Das Session-Modul unterstützt beide Methoden. Cookies sind
|
|
optimal, aber da sie nicht zuverlässig sind (Clients müssen
|
|
sie nicht unbedingt akzeptieren), können wir uns nicht auf sie
|
|
verlassen. Die zweite Methode hängt die Session-ID direkt an die
|
|
URLs.
|
|
</para>
|
|
<para>
|
|
Wenn PHP mit
|
|
<link
|
|
linkend="install.configure.enable-trans-sid"><literal>--enable-trans-sid</literal></link>
|
|
kompiliert wurde, kann es dies transparent machen. Wenn Sie diese
|
|
Option aktivieren, werden relative URIs automatisch geändert,
|
|
sodass sie die Session-ID enthalten. Alternativ können sie die
|
|
Konstante <literal>SID</literal> verwenden, die definiert wird,
|
|
falls vom Client keinen passendes Cookie gesendet wurde.
|
|
<literal>SID</literal> hat entweder die Form
|
|
<literal>session_name=session_id</literal> oder ist eine leere
|
|
Zeichenkette.
|
|
</para>
|
|
<para>
|
|
Das folgende Beispiel demonstriert, wie eine Variable registriert
|
|
wird und wie unter Verwendung einer SID korrekt auf eine andere
|
|
Seite verwiesen wird.
|
|
<example>
|
|
<title>Zählen der Seitenaufrufe eines einzelnen Benutzers</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
if (!session_is_registered('zaehler')) {
|
|
session_register('zaehler');
|
|
$zaehler = 1;
|
|
}
|
|
else {
|
|
$zaehler++;
|
|
}
|
|
?>
|
|
|
|
Hallo Besucher, Sie haben diese Seite <?php echo $zaehler; ?> Mal
|
|
aufgerufen.<p>
|
|
|
|
<?php
|
|
# für den Fall, dass der Benutzer Cookies deaktiviert hat,
|
|
# ist das <?php echo SID?> nötig, um die Session-ID zu erhalten
|
|
# (wenn die Option short tag aktiviert ist, kann <?=SID?> verwendet
|
|
# werden)
|
|
?>
|
|
|
|
Hier gehts <A HREF="nextpage.php?<?php echo SID?>">weiter</A>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Das <literal><?=SID?></literal> ist nicht nötig, wenn PHP mit
|
|
<link linkend="install.configure.enable-trans-sid"><literal>--enable-trans-sid</literal></link>
|
|
kompiliert wurde.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Bei nichtrelativen URLs wird davon ausgegangen, dass sie auf
|
|
externe Seiten zeigen und, weil es ein Sicherheitsrisiko wäre,
|
|
die SID an einen anderen Server zu übermitteln, von daher keine
|
|
SID angehängt.
|
|
</para>
|
|
</note>
|
|
<para>
|
|
Wenn Sie die Speicherung in einer Datenbank oder irgendeine andere
|
|
Art der Speicherung realisieren wollen, müssen Sie
|
|
<function>session_set_save_handler</function> verwenden, um eine
|
|
Reihe von benutzerdefinierten Speicherfunktionen zu erzeugen.
|
|
</para>
|
|
<para>
|
|
Das Sessionmanagementsystem unterstützt eine Anzahl von
|
|
Konfigurationsoptionen, die sie in Ihrer php.ini setzen können. Wir
|
|
geben Ihnen dazu einen kleinen Überblick.
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.save_handler</literal> definiert den Namen der
|
|
Prozedur, die benutzt wird, um die Daten zu speichern und
|
|
zurückzuholen, die mit der Session in Verbindung
|
|
stehen. Grundeinstellung <literal>files</literal>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.save_path</literal> definiert das Argument,
|
|
das an die Speicherprozedur übergeben wird. Wenn Sie die
|
|
standardmäßige files Prozedur wählen, ist das der Pfad, unter
|
|
dem die Dateien erzeugt werden. Grundeinstellung
|
|
<literal>/tmp</literal>. Wenn die Verzeichnistiefe von
|
|
<literal>session.save_path</literal> größer als zwei ist, wird
|
|
die garbage collection nicht durchgeführt.
|
|
</simpara>
|
|
<warning>
|
|
<para>
|
|
Wenn Sie ein Verzeichnis gewählt haben, für das jeder
|
|
Leserechte hat, wie das z.B. bei /tmp (Grundeinstellung) der
|
|
Fall ist, könnten andere Serverbenutzer mit Hilfe der
|
|
Dateiliste dieses Verzeichnisses Ihre Sessions entführen.
|
|
</para>
|
|
</warning>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.name</literal> spezifiziert den Namen der
|
|
Session, der als Cookie-Name verwendet wird. Grundeinstellung
|
|
<literal>PHPSESSID</literal>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.auto_start</literal> spezifiziert, ob das
|
|
Session-Modul zu Beginn einer Anfrage automatisch eine Session
|
|
startet. Grundeinstellung <literal>0</literal> (deaktiviert).
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.cookie_lifetime</literal> spezifiziert die
|
|
Cookie-Lebensdauer, die an den Browser geschickt wird, in
|
|
Sekunden. Der Wert 0 bedeutet "bis der Browser geschlossen
|
|
wird." Grundeinstellung <literal>0</literal>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.serialize_handler</literal> definiert den
|
|
Namen der Prozedur, die benutzt wird, um Daten zu
|
|
serialisieren/deserialisieren. Gegenwärtig wird ein internes
|
|
PHP-Format (Name <literal>php</literal>) und WDDX (name
|
|
<literal>wddx</literal>) unterstützt. WDDX steht nur zur
|
|
Verfügung, wenn PHP mit <link linkend="ref.wddx">WDDX
|
|
support</link> kompiliert wurde. Grundeinstellung
|
|
<literal>php</literal>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.gc_probability</literal> spezifiziert die
|
|
prozentuale Wahrscheinlichkeit, dass die gc (garbage
|
|
collection) Routine bei jeder Anfrage gestartet
|
|
wird. Grundeinstellung <literal>1</literal>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.gc_maxlifetime</literal> spezifiziert die
|
|
Anzahl der Sekunden, nach denen Daten als 'garbage' ('Müll')
|
|
betrachtet und entsorgt werden.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.referer_check</literal> enthält die
|
|
Zeichenkette, auf die Sie jeden HTTP-Referer überprüfen
|
|
wollen. Wenn der Referer vom Client gesendet und die
|
|
Zeichenkette nicht gefunden wurde, wird die eingebettete
|
|
Session-ID als ungültig gekennzeichnet. Grundeinstellung ist
|
|
eine leere Zeichenkette.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.entropy_file</literal> gibt den Pfad zu einer
|
|
externen Quelle (Datei) an, die bei der Erzeugung einer
|
|
Session-ID als zusätzliche Entropiequelle verwendet
|
|
wird. Beispiele sind <literal>/dev/random</literal> oder
|
|
<literal>/dev/urandom</literal>, die auf vielen Unix-Systemen
|
|
zur Verfügung stehen.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.entropy_length</literal> spezifiziert die
|
|
Anzahl der Bytes, die von der oben spezifizierten Datei gelesen
|
|
werden. Grundeinstellung <literal>0</literal> (deaktiviert).
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.use_cookies</literal> spezifiziert, ob das
|
|
Modul Cookies verwendet, um die Session-ID clientseitig zu
|
|
speichern. Grundeinstellung <literal>1</literal> (aktiviert).
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.cookie_path</literal> spezifiziert den Pfad,
|
|
in dem das Session-Cookie gesetzt wird. Grundeinstellung
|
|
<literal>/</literal>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.cookie_domain</literal> spezifiziert die
|
|
Domain, unter der das Session-Cookie gesetzt wird. In der
|
|
Grundeinstellung überhaupt keine.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.cache_limiter</literal> spezifiziert die
|
|
Methode der Cacheverwaltung, die bei Session-Seiten benutzt
|
|
wird (none/nocache/private/private_no_expire/public).
|
|
Grundeinstellung <literal>nocache</literal>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.cache_expire</literal> spezifiziert in
|
|
Minuten, wie lange Session-Seiten im Cache bleiben. Bei nocache
|
|
ist diese Angabe wirkungslos. Grundeinstellung
|
|
<literal>180</literal>.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>session.use_trans_sid</literal> bestimmt, wenn
|
|
mit
|
|
<link linkend="install.configure.enable-trans-sid"><literal>--enable-trans-sid</literal></link>
|
|
kompiliert wurde, ob transparente SID-Unterstützung aktiviert
|
|
ist oder nicht. Grundeinstellung <literal>1</literal>
|
|
(aktiviert).
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>url_rewriter.tags</literal> bestimmt, wenn
|
|
Unterstützung für transparente SID aktiviert ist, welche
|
|
HTML-Tags so umgeschrieben werden, dass sie die Session-ID
|
|
beinhalten. Grundeinstellung
|
|
<literal>a=href,area=href,frame=src,input=src,form=fakeentry</literal>
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
<note>
|
|
<para>
|
|
Die Behandlung von Sessions wurde in PHP 4.0 eingeführt.
|
|
</para>
|
|
</note>
|
|
</para>
|
|
</partintro>
|
|
|
|
&reference.session.functions;
|
|
|
|
</reference>
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"../../../manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|
|
|