1
0
mirror of https://github.com/php/doc-de.git synced 2026-04-29 18:03:13 +02:00
Files
archived-doc-de/reference/session/reference.xml
T
Simone Cortesi e9c131d04d WS fix: DE
git-svn-id: https://svn.php.net/repository/phpdoc/de/trunk@78306 c90b9560-bf6c-de11-be94-00142212c4b1
2002-04-16 00:15:04 +00:00

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>&lt;?=SID?&gt;</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
-->