1
0
mirror of https://github.com/php/doc-de.git synced 2026-03-25 15:52:10 +01:00
Files
archived-doc-de/reference/session/examples.xml
2010-03-29 00:47:47 +00:00

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;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
-->