mirror of
https://github.com/php/doc-de.git
synced 2026-03-25 15:52:10 +01:00
git-svn-id: https://svn.php.net/repository/phpdoc/de/trunk@297032 c90b9560-bf6c-de11-be94-00142212c4b1
276 lines
9.8 KiB
XML
276 lines
9.8 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: samesch Status: ready -->
|
|
|
|
<appendix xml:id="session.examples" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
&reftitle.examples;
|
|
<section xml:id="session.examples.basic">
|
|
<note>
|
|
<para>
|
|
Ab 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 brauchen Sie für
|
|
<varname>$_SESSION</varname> nicht das Schlüsselwort <link
|
|
linkend="language.variables.scope"><command>global</command></link> zu
|
|
verwenden. Bitte beachten Sie, dass in dieser Dokumentation nun überall
|
|
<varname>$_SESSION</varname> verwendet wird. Sie können
|
|
<varname>$_SESSION</varname> durch <varname>$HTTP_SESSION_VARS</varname>
|
|
ersetzen, wenn Sie Letzteres bevorzugen. Beachten Sie auch, dass Sie Ihre
|
|
Session mit <function>session_start</function> starten müssen, bevor
|
|
<varname>$_SESSION</varname> zur Verfügung steht.
|
|
</para>
|
|
<para>
|
|
Für die Schlüssel des assoziativen <varname>$_SESSION</varname>-Arrays
|
|
gelten die selben Beschränkungen, wie für die Bezeichnungen von regulären
|
|
Variablen in PHP, d.h. sie dürfen nicht mit einer Zahl, sondern müssen mit
|
|
einem Buchstaben oder Unterstrich beginnen. Um weitere Deteils zu
|
|
erhalten, siehe Abschnitt <link
|
|
linkend='language.variables'>Variablen</link>.
|
|
</para>
|
|
</note>
|
|
|
|
<para>
|
|
Falls <link linkend="ini.register-globals">register_globals</link>
|
|
deaktiviert ist, können nur Bestandteile des globalen assoziativen Arrays
|
|
<varname>$_SESSION</varname> als Session-Variablen registriert werden.
|
|
Wiederhergestellte Session-Variablen stehen nur im Array
|
|
<varname>$_SESSION</varname> zur Verfügung.
|
|
</para>
|
|
<para>
|
|
Aus Gründen der Verbesserung 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> werden die Funktionen
|
|
<function>session_register</function>,
|
|
<function>session_unregister</function> und
|
|
<function>session_is_registered</function> nicht benötigt. Auf die
|
|
Session-Variablen kann wie auf jede normale Variable zugegriffen werden.
|
|
<example>
|
|
<title>
|
|
Registrierung einer Variablen mit <varname>$_SESSION</varname>.
|
|
</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
session_start();
|
|
// Verwenden Sie bei PHP 4.0.6 oder niedriger $HTTP_SESSION_VARS
|
|
if (!isset($_SESSION['zaehler'])) {
|
|
$_SESSION['zaehler'] = 0;
|
|
} else {
|
|
$_SESSION['zaehler']++;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
<example>
|
|
<title>
|
|
Aufheben der Registrierung einer Variablen mit
|
|
<varname>$_SESSION</varname> und deaktiviertem <link
|
|
linkend="ini.register-globals">register_globals</link>.
|
|
</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
session_start();
|
|
// Verwenden Sie bei PHP 4.0.6 oder niedriger $HTTP_SESSION_VARS
|
|
unset($_SESSION['zaehler']);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<caution>
|
|
<para>
|
|
Heben Sie NICHT die Registrierung der gesamten
|
|
<varname>$_SESSION</varname> mit <literal>unset($_SESSION)</literal> auf,
|
|
weil dies die Registrierung von Variablen durch die Superglobale
|
|
<varname>$_SESSION</varname> deaktivieren würde.
|
|
</para>
|
|
</caution>
|
|
</para>
|
|
<warning>
|
|
<para>
|
|
Sie können in Session-Variablen keine Referenzen verwenden, weil es keine
|
|
praktikable Möglichkeit gibt, eine Referenz in eine andere Variable
|
|
zurückzuführen.
|
|
</para>
|
|
</warning>
|
|
<para>
|
|
Wenn <link linkend="ini.register-globals">register_globals</link> aktiviert
|
|
ist, kann jede globalen Variable als Session-Variable registriert werden.
|
|
Beim Neustart einer Session werden diese Variablen als entsprechende
|
|
globale Variablen wiederhergestellt. Da PHP wissen muss, welche globalen
|
|
Variablen als Session-Variablen registriert sind, muss der Benutzer
|
|
Variablen mit der Funktion <function>session_register</function>
|
|
registrieren. Sie können das vermeiden, indem Sie einfach Einträge in
|
|
<varname>$_SESSION</varname> setzen.
|
|
<caution>
|
|
<para>
|
|
Verwenden Sie nicht <function>session_register</function>,
|
|
<function>session_is_registered</function> und
|
|
<function>session_unregister</function>, wenn Sie
|
|
<varname>$_SESSION</varname> vor PHP 4.3.0 verwenden und <link
|
|
linkend="ini.register-globals">register_globals</link> deaktiviert ist.
|
|
Es ist sowohl aus Sicherheitsgründen als auch wegen der Performance
|
|
empfehlenswert, <link
|
|
linkend="ini.register-globals">register_globals</link> zu deaktivieren.
|
|
</para>
|
|
</caution>
|
|
</para>
|
|
<para>
|
|
Wenn <link linkend="ini.register-globals">register_globals</link> aktiviert
|
|
ist, dann referenzieren die globalen Variablen und die Einträge von
|
|
<varname>$_SESSION</varname> automatisch die selben Werte, die in der
|
|
vorherigen Instanz der Session registriert wurden. Falls die Variable
|
|
mittels <varname>$_SESSION</varname> registriert wird, steht die globale
|
|
Variable allerdings erst ab der nächsten Anfrage zur Verfügung.
|
|
</para>
|
|
<para>
|
|
Es gibt einen Fehler in PHP 4.2.3 und früheren Versionen. Wenn Sie eine
|
|
neue Session-Variable mittels <function>session_register</function>
|
|
registrieren, referenzieren der Eintrag im globalen Bereich und der
|
|
<varname>$_SESSION</varname>-Eintrag bis zum nächsten
|
|
<function>session_start</function> nicht den selben Wert. D.h. eine
|
|
Änderung an der neu registrierten globalen Variablen wird nicht vom
|
|
<varname>$_SESSION</varname>-Eintrag widergespiegelt. Dies wurde in PHP
|
|
4.3.0 korrigiert.
|
|
</para>
|
|
</section>
|
|
|
|
<section xml:id="session.idpassing">
|
|
<title>Übermittlung der Session-ID</title>
|
|
<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 immer zur Verfügung stehen, bieten wir auch noch eine Alternative
|
|
an. Die zweite Methode hängt die Session-ID direkt an die URLs.
|
|
</para>
|
|
<para>
|
|
PHP ist in der Lage, Links transparent umzuwandeln. Falls Sie nicht PHP
|
|
4.2.0 oder höher verwenden, müssen Sie das beim Übersetzen von PHP manuell
|
|
aktivieren. Unter Unix müssen Sie dazu configure mit <link
|
|
linkend="ini.session.use-trans-sid"> --enable-trans-sid</link> aufrufen.
|
|
Wenn diese Option und die Laufzeit-Option
|
|
<literal>session.use_trans_sid</literal> aktiviert sind, werden relative
|
|
URIs automatisch so geändert, dass sie die Session-ID enthalten.
|
|
<note>
|
|
<para>
|
|
Die &php.ini;-Anweisung <link
|
|
linkend="ini.arg-separator.output">arg_separator.output</link> ermöglicht
|
|
es, die Trennung von Argumenten anzupassen. Geben Sie dort für volle
|
|
XHTML-Konformität &amp; an.
|
|
</para>
|
|
</note>
|
|
</para>
|
|
<para>
|
|
Alternativ können Sie die Konstante <constant>SID</constant> verwenden, die
|
|
definiert ist, nachdem die Session gestartet wurde. Falls der Client kein
|
|
geeignetes Session-Cookie gesendet hat, hat sie die Form
|
|
<literal>session_name=session_id</literal>. Andernfalls wird sie zu einer
|
|
leeren Zeichenkette erweitert. Aus diesem Grund können Sie sie
|
|
bedingungslos in URLs einbetten.
|
|
</para>
|
|
<para>
|
|
Das folgende Beispiel demonstriert, wie eine Variable registriert wird und
|
|
wie unter Verwendung einer <constant>SID</constant> korrekt auf eine andere
|
|
Seite verwiesen wird.
|
|
<example>
|
|
<title>Zählen der Seitenaufrufe eines einzelnen Benutzers</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
|
|
session_start();
|
|
|
|
if (empty($_SESSION['zaehler'])) {
|
|
$_SESSION['zaehler'] = 1;
|
|
} else {
|
|
$_SESSION['zaehler']++;
|
|
}
|
|
?>
|
|
|
|
<p>
|
|
Hallo Besucher, Sie haben diese Seite <?php echo $_SESSION['zaehler']; ?> mal
|
|
aufgerufen.
|
|
</p>
|
|
|
|
<p>
|
|
Hier gehts
|
|
<a href="nextpage.php?<?php echo htmlspecialchars(SID); ?>">weiter</a>.
|
|
</p>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Die Funktion <function>htmlspecialchars</function> kann dazu verwendet
|
|
werden, um bei der Ausgabe der <constant>SID</constant> XSS-ähnliche
|
|
Angriffe zu verhindern.
|
|
</para>
|
|
<para>
|
|
Die oben gezeigte Ausgabe der <constant>SID</constant> ist nicht nötig,
|
|
wenn PHP mit <link
|
|
linkend="ini.session.use-trans-sid">--enable-trans-sid</link> übersetzt
|
|
wurde.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Bei nichtrelativen URLs wird davon ausgegangen, dass sie auf externe
|
|
Seiten zeigen und deshalb keine <constant>SID</constant> angehängt, weil
|
|
es ein Sicherheitsrisiko wäre, die <constant>SID</constant> an einen
|
|
anderen Server zu übermitteln.
|
|
</para>
|
|
</note>
|
|
</section>
|
|
|
|
<section xml:id="session.customhandler">
|
|
<title>Individuelle Session-Routinen</title>
|
|
<para>
|
|
Wenn Sie die Speicherung in einer Datenbank oder irgendeine andere Art der
|
|
Speicherung realisieren wollen, können Sie
|
|
<function>session_set_save_handler</function> verwenden, um eine Reihe von
|
|
benutzerdefinierten Speicherfunktionen zu erzeugen.
|
|
</para>
|
|
</section>
|
|
</appendix>
|
|
|
|
<!-- 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:"~/.phpdoc/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
|
|
-->
|
|
|