Das Verhalten dieser Funktionen wird durch Einstellungen in der php.ini beeinflusst.
Name | Standard | Veränderbar | Changelog |
---|---|---|---|
session.save_path | "" | INI_ALL |
|
session.name | "PHPSESSID" | INI_ALL |
|
session.save_handler | "files" | INI_ALL |
|
session.auto_start | "0" | INI_PERDIR |
|
session.gc_probability | "1" | INI_ALL |
|
session.gc_divisor | "100" | INI_ALL |
|
session.gc_maxlifetime | "1440" | INI_ALL |
|
session.serialize_handler | "php" | INI_ALL |
|
session.cookie_lifetime | "0" | INI_ALL |
|
session.cookie_path | "/" | INI_ALL |
|
session.cookie_domain | "" | INI_ALL |
|
session.cookie_secure | "0" | INI_ALL |
Vor PHP 7.2.0 war die Grundeinstellung "" . |
session.cookie_httponly | "0" | INI_ALL |
Vor PHP 7.2.0 war die Grundeinstellung "" . |
session.cookie_samesite | "" | INI_ALL |
Verfügbar seit PHP 7.3.0. |
session.use_strict_mode | "0" | INI_ALL |
|
session.use_cookies | "1" | INI_ALL |
|
session.use_only_cookies | "1" | INI_ALL |
|
session.referer_check | "" | INI_ALL |
|
session.cache_limiter | "nocache" | INI_ALL |
|
session.cache_expire | "180" | INI_ALL |
|
session.use_trans_sid | "0" | INI_ALL |
|
session.trans_sid_tags | "a=href,area=href,frame=src,form=" | INI_ALL |
Verfügbar seit PHP 7.1.0. |
session.trans_sid_hosts | $_SERVER['HTTP_HOST'] |
INI_ALL |
Verfügbar seit PHP 7.1.0. |
session.sid_length | "32" | INI_ALL |
Verfügbar seit PHP 7.1.0. |
session.sid_bits_per_character | "4" | INI_ALL |
Verfügbar seit PHP 7.1.0. |
session.upload_progress.enabled | "1" | INI_PERDIR |
|
session.upload_progress.cleanup | "1" | INI_PERDIR |
|
session.upload_progress.prefix | "upload_progress_" | INI_PERDIR |
|
session.upload_progress.name | "PHP_SESSION_UPLOAD_PROGRESS" | INI_PERDIR |
|
session.upload_progress.freq | "1%" | INI_PERDIR |
|
session.upload_progress.min_freq | "1" | INI_PERDIR |
|
session.lazy_write | "1" | INI_ALL |
|
session.hash_function | "0" | INI_ALL |
Entfernt in PHP 7.1.0 |
session.hash_bits_per_character | "4" | INI_ALL |
Entfernt in PHP 7.1.0 |
session.entropy_file | "" | INI_ALL |
Entfernt in PHP 7.1.0 |
session.entropy_length | "0" | INI_ALL |
Entfernt in PHP 7.1.0 |
Das Session-Verwaltungssystem unterstützt eine Anzahl von Konfigurationsoptionen, die in der php.ini gesetzt werden können. Wir geben dazu einen kleinen Überblick.
session.save_handler
string
session.save_handler
definiert den Namen der Routine,
die verwendet wird, um die Daten zu speichern und abzurufen, die mit der
Session in Verbindung stehen. Grundeinstellung files
.
Zu beachten ist, dass einzelne Erweiterungen ihre eigenen
save_handler
registrieren können. Welche Routinen
registriert sind, kann auf Basis der jeweiligen Installation mit
phpinfo() ermittelt werden. Siehe auch
session_set_save_handler().
session.save_path
string
session.save_path
definiert das Argument, das an die
Speicherroutine übergeben wird. Wenn die standardmäßige files-Routine
gewählt wird, ist das der Pfad, unter dem die Dateien erzeugt werden.
Siehe auch session_save_path().
Für diese Anweisung gibt es ein optionales Argument
N
, das die Anzahl der Verzeichnisebenen bestimmt,
über welche die Session-Dateien verteilt werden. Wird sie zum Beispiel
auf '5;/tmp'
gesetzt, kann das das Anlegen einer
Session-Datei und -Speicherstelle wie
/tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If
bewirken. Um N
verwenden zu können, müssen alle diese
Verzeichnisse vorher angelegt werden. In
ext/session gibt es für diesen Zweck ein kleines
Shell-Skript namens mod_files.sh und eine Version
für Windows namens mod_files.bat. Zu beachten ist,
dass die automatische Speicherbereinigung (Garbage Collection) nicht
durchgeführt wird, wenn N
verwendet wird und größer 0
ist (für weitere Informationen siehe eine Kopie der php.ini). Außerdem
muss bei der Verwendung von N
beachtet werden, dass
session.save_path
zwischen Anführungsstriche gesetzt
wird, weil der Trenner (;
) in der php.ini auch für
Kommentare verwendet wird.
Standardmäßig erzeugt die files-Speicherroutine Dateien mit dem Modus
600. Dieser Wert kann mit dem optionalen Argument
MODE
geändert werden:
N;MODE;/pfad
, wobei MODE
die
oktale Darstellung des Modus ist. Die Angabe von MODE
hat keine Auswirkungen auf den Prozess umask.
Wenn ein Verzeichnis gewählt wurde, 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 die Sessions entführen.
Wird das oben beschriebene optionale Argument N
für
die Verzeichnisebenen verwendet, ist zu beachten, dass ein Wert größer
als 1 oder 2 wegen der großen Anzahl an benötigten Verzeichnissen für
die meisten Websites unangemessen ist: z. B. bedeutet ein Wert von 3,
dass (2 ** session.sid_bits_per_character) ** 3
Verzeichnisse im Dateisystem existieren, was eine große Verschwendung
an Speicher und Inodes zur Folge haben kann.
N
größer als 2 sollte nur verwendet werden, wenn die
Website wirklich so groß ist, dass dies erforderlich ist.
session.name
string
session.name
definiert den Namen der Session, der als
Cookie-Name verwendet wird. Grundeinstellung
PHPSESSID
. Siehe auch
session_name().
session.auto_start
bool
session.auto_start
definiert, ob das Session-Modul zu
Beginn einer Anfrage automatisch eine Session startet. Grundeinstellung
0
(deaktiviert).
session.serialize_handler
string
session.serialize_handler
definiert den Namen der
Routine, die verwendet wird, um Daten zu serialisieren/deserialisieren.
Unterstützt werden das PHP-Serialisierungsformat (Name
php_serialize
), die internen PHP-Formate (Namen
php
und php_binary
) und WDDX (Name
wddx
). WDDX steht nur zur Verfügung, wenn PHP mit
WDDX-Unterstützung kompiliert wurde.
php_serialize
verwendet intern die einfachen
serialize/unserialize-Funktionen und hat nicht die Einschränkungen, die
php
und php_binary
haben. Ältere
Serialisierungsroutinen können weder numerische Indizes noch
alphanumerische Indizes, die Sonderzeichen (|
und
!
) enthalten, in $_SESSION speichern. Um am Ende des
Skripts Fehler wegen solcher Indizes zu vermeiden, sollte
php_serialize
verwendet werden. Grundeinstellung
php
.
session.gc_probability
int
session.gc_probability
wird in Verbindung mit
session.gc_divisor
dazu verwendet, die
Wahrscheinlichkeit zu regeln, mit der die gc-Routine (gc=garbage
collection, Speicherbereinigung) gestartet wird. Grundeinstellung
1
. Siehe auch
session.gc_divisor.
session.gc_divisor
int
session.gc_divisor
definiert gekoppelt mit
session.gc_probability
die Wahrscheinlichkeit, mit
der die gc-Routine (gc=garbage collection, Speicherbereinigung) bei
jeder Initialisierung einer Session gestartet wird. Die
Wahrscheinlichkeit errechnet sich aus gc_probability/gc_divisor. 1/100
bedeutet z. B., dass die gc-Routine bei jeder Anfrage mit einer
Wahrscheinlichkeit von 1% gestartet wird. Grundeinstellung
100
.
session.gc_maxlifetime
int
session.gc_maxlifetime
definiert die Anzahl der
Sekunden, nach denen Daten als 'garbage' ('Müll') betrachtet und
möglicherweise entsorgt werden. Die Speicherbereinigung kann zu Beginn
einer Session durchgeführt werden (abhängig von
session.gc_probability
und session.gc_divisor).
Die Grundeinstellung ist 1440
(24 Minuten).
Hinweis: Falls sich der Wert von
session.gc_maxlifetime
in verschiedenen Skripten unterscheidet, aber sie die Session-Daten an der selben Stelle speichern, löscht das Skript mit dem kleinsten Wert die Daten. In diesem Fall sollte die Anweisung zusammen mit der Anweisung session.save_path verwendet werden.
session.referer_check
string
session.referer_check
enthält die Zeichenkette, auf
die jeder HTTP-Referer überprüft werden soll. Wenn der Referer vom
Client gesendet wurde und die Zeichenkette nicht gefunden wurde, wird
die eingebettete Session-ID als ungültig gekennzeichnet.
Grundeinstellung ist eine leere Zeichenkette.
session.entropy_file
string
session.entropy_file
gibt den Pfad zu einer externen
Quelle (Datei) an, die bei der Erzeugung einer Session-ID als
zusätzliche Entropiequelle verwendet wird. Beispiele sind
/dev/random
oder /dev/urandom
, die
auf vielen Unix-Systemen zur Verfügung stehen.
Diese Einstellung wird unter Windows unterstützt. Wenn
session.entropy_length
auf einen von Null
verschiedenen Wert gesetzt wird, verwendet PHP die Windows-Zufalls-API
als Entropie-Quelle.
Hinweis: Entfernt in PHP 7.1.0. Die Grundeinstellung für
session.entropy_file
ist/dev/urandom
oder/dev/arandom
, falls es verfügbar ist.
session.entropy_length
int
session.entropy_length
definiert die Anzahl der
Bytes, die von der oben spezifizierten Datei gelesen werden.
Grundeinstellung 32
(deaktiviert).
Entfernt in PHP 7.1.0.
session.use_strict_mode
bool
session.use_strict_mode
definiert ob das Modul den
strikten Modus für die Session-ID verwendet. Wenn dieser Modus aktiviert
ist, akzeptiert das Modul keine Session-ID, die nicht initialisiert ist.
Falls ein Browser eine uninitialisierte Session-ID sendet, wird eine
neue Session-ID zum Browser gesendet. Im strikten Modus sind Anwendungen
vor der Übernahme der Session durch Session-Fixation geschützt.
Grundeinstellung 0
(deaktiviert).
Hinweis: Das Aktivieren von
session.use_strict_mode
ist für grundsätzliche Session-Sicherheit verpflichtend. Es wird empfohlen, dass alle Sites dies aktiveren. Verdeutlichender Beispielcode kann der Dokumentation von session_create_id() entnommen werden.
Wenn eine benutzerdefinierte Session-Routine, die per
session_set_save_handler() registriert wurde, weder
SessionUpdateTimestampHandlerInterface::validateId()
implementiert, noch einen validate_sid
-Callback
übergibt, ist der strikte Session-ID-Modus praktisch deaktiviert,
unabhängig vom Wert dieser Anweisung. Im Besonderen ist zu beachten,
dass SessionHandler
SessionHandler::validateId()
nicht implementiert.
session.use_cookies
definiert, ob das Modul Cookies
verwendet, um die Session-ID clientseitig zu speichern. Grundeinstellung
1
(aktiviert).
session.use_only_cookies
definiert, ob das Modul
nur Cookies verwendet, um die
Session-ID clientseitig zu speichern. Durch die Aktivierung dieser
Einstellung werden Angriffe verhindert, die darauf basieren, dass
Session-IDs in URLs weitergegeben werden. Grundeinstellung
1
(aktiviert).
session.cookie_lifetime
definiert die
Cookie-Lebensdauer, die an den Browser geschickt wird, in Sekunden. Der
Wert 0 bedeutet "bis der Browser geschlossen wird." Grundeinstellung
0
. Siehe auch
session_get_cookie_params() und
session_set_cookie_params().
Hinweis: Der Verfalls-Zeitstempel wird relativ zur Serverzeit gesetzt, die nicht unbedingt mit der Browserzeit des Clients übereinstimmt.
session.cookie_path
definiert den Pfad, der im
Session-Cookie gesetzt wird. Grundeinstellung /
.
Siehe auch session_get_cookie_params() und
session_set_cookie_params().
session.cookie_domain
definiert die Domain, die im
Session-Cookie gesetzt wird. In der Grundeinstellung überhaupt keine,
was bedeutet, dass entsprechend der Spezifikation für Cookies der
Hostname des Servers verwendet wird, der das Cookie erzeugt hat. Siehe
auch session_get_cookie_params() und
session_set_cookie_params().
session.cookie_secure
definiert, ob Cookies nur über
sichere Verbindungen geschickt werden sollen. Wenn diese Option auf
on
gesetzt ist, funktionieren Sessions nur mit
HTTPS-Verbindungen. Ist sie auf off
gesetzt,
funktionieren Sessions sowohl mit HTTP- als auch mit HTTPS-Verbindungen.
Grundeinstellung off
. Siehe auch
session_get_cookie_params() und
session_set_cookie_params().
session.cookie_httponly
markiert das Cookie als nur
über das HTTP-Protokoll zugänglich. Das bedeutet, dass Skriptsprachen
wie JavaScript nicht auf das Cookie zugreifen können. Diese Einstellung
kann helfen, Identitätsdiebstahl durch XSS-Angriffe zu reduzieren
(allerdings wird sie nicht von allen Browsern unterstützt).
Lax
und
Strict
bedeuten, dass das Cookie bei POST-Anfragen
nicht domainübergreifend gesendet wird; Lax
sendet
das Cookie für domainübergreifende GET-Anfragen, während
Strict
das nicht tut.
session.cache_limiter
string
session.cache_limiter
definiert die Methode der
Cacheverwaltung, die bei Session-Seiten verwendet wird. Das kann einer der
folgenden Werte sein: nocache
,
private
, private_no_expire
oder
public
. Grundeinstellung nocache
.
Informationen über die Bedeutung dieser Werte sind in der
session_cache_limiter()-Dokumentation zu finden.
session.cache_expire
int
session.cache_expire
definiert in Minuten, wie lange
Session-Seiten im Cache bleiben. Bei nocache ist diese Angabe
wirkungslos. Grundeinstellung 180
. Siehe auch
session_cache_expire().
session.use_trans_sid
bool
session.use_trans_sid
bestimmt ob transparente
SID-Unterstützung aktiviert ist oder nicht. Grundeinstellung
0
(deaktiviert).
Hinweis: Die URL-basierte Session-Verwaltung hat im Vergleich zur Cookie-basierten Session-Verwaltung zusätzliche Sicherheitsrisiken. Benutzer können zum Beispiel eine URL, die eine aktive Session-ID enthält, per E-Mail an Freunde schicken oder in ihren Bookmarks speichern und immer mit der selben Session-ID auf die Seite zugreifen. Seit PHP 7.1.0 werden auch vollständige URL-Pfade, z. B. https://php.net/, vom trans-sid-Feature unterstützt. Vorherige PHP-Versionen unterstützten nur relative URL-Pfade. Rewrite-Ziel-Hosts werden durch session.trans_sid_hosts definiert.
session.trans_sid_tags
gibt an, welche HTML-Tags
umgeschrieben werden, um die Session-ID zu enthalten, wenn transparente
SID-Unterstützung aktiviert ist. Die Voreinstellung ist
a=href,area=href,frame=src,input=src,form=
.
form
ist ein besonderes Tag. <input
hidden="session_id" name="session_name">
wird als
Form-Variable hinzugefügt.
Hinweis: Vor PHP 7.1.0, wurde url_rewriter.tags für diesen Zweck verwendet. Seit PHP 7.1.0 wird
fieldset
nicht mehr als besonderes Tag angesehen.
session.trans_sid_hosts
string
session.trans_sid_hosts
gibt an, welche Hosts
umgeschrieben werden, um die Session-ID zu enthalten, wenn transparente
SID-Unterstützung aktiviert ist. Die Voreinstellung ist
$_SERVER['HTTP_HOST']
. Mehrere Hosts können durch ","
getrennt angegeben werden; Leerzeichen sind nicht erlaubt. Beispiel:
php.net,wiki.php.net,bugs.php.net
.
session.sid_length
int
session.sid_length
erlaubt die Angabe der Länge der
Session-ID-Zeichenkette. Diese Länge kann zwischen 22 und 256 liegen.
Die Voreinstellung ist 32. Wird Kompatibilität benötigt, kann 32, 40
etc. angegeben werden. Längere Session-IDs sind schwieriger zu erraten.
Wenigstens 32 Zeichen werden empfohlen.
Hinweis zur Kompatibiliät: Anstelle von
session.hash_function
=0 (MD5) und
session.hash_bits_per_character
=4,
session.hash_function
=1 (SHA1) und
session.hash_bits_per_character
=6 sollte 32
verwendet werden. Anstelle von
session.hash_function
=0 (MD5) und
session.hash_bits_per_character
=5 sollte 26
verwendet werden. Anstelle von
session.hash_function
=0 (MD5) und
session.hash_bits_per_character
=6 sollte 22
verwendet werden. Die INI-Werte müssen so konfiguriert werden, dass die
Session-ID mindestens 128 Bits enthält. Es ist darauf zu
achten, dass der Wert für
session.sid_bits_per_character
angemessen ist, da
die Session-ID sonst schwächer ist.
Hinweis: Diese Einstellung wurde in PHP 7.1.0 eingeführt.
session.sid_bits_per_character
int
session.sid_bits_per_character
erlaubt die Angabe der
Anzahl der Bits in kodierten Session-ID-Zeichen. Die möglichen Werte
sind '4' (0-9, a-f), '5' (0-9, a-v) und '6' (0-9, a-z, A-Z, "-", ",").
Die Voreinstellung ist 4. Mehr Bits ergeben stärkere Session-IDs. 5 wird
für die meisten Umgebungen empfohlen.
Hinweis: Diese Einstellung wurde in PHP 7.1.0 eingeführt.
session.hash_function
mixed
session.hash_function
ermöglicht es, den
Prüfsummen-Algorithmus für die Erzeugung von Session-IDs selbst zu
bestimmen. '0' bedeutet MD5 (128 Bit) und '1' bedeutet SHA-1 (160 Bit).
Es ist auch möglich, einen der Algorithmen zu bestimmen, die durch die
Hash-Erweiterung (falls vorhanden) zur
Verfügung stehen, z. B. sha512
oder
whirlpool
. Eine vollständige Liste der unterstützten
Algorithmen kann mit der Funktion hash_algos()
abgerufen werden.
Hinweis: Entfernt in PHP 7.1.0.
session.hash_bits_per_character
int
session.hash_bits_per_character
ermöglicht es, zu
definieren wieviele Bit bei der Umwandlung der binären Prüfsummen-Daten
in etwas Lesbares in jedem Zeichen gespeichert werden. Mögliche Werte
sind '4' (0-9, a-f), '5' (0-9, a-v) und '6' (0-9, a-z, A-Z, "-", ",").
Hinweis: Entfernt in PHP 7.1.0.
session.upload_progress.enabled
bool
session.upload_progress.cleanup
bool
Hinweis: Es wird dringend empfohlen diese Funktion aktiviert zu lassen.
session.upload_progress.prefix
string
$_POST[ini_get("session.upload_progress.name")]
angehängt, um einen eindeutigen Schlüssel zu erhalten.
Grundeinstellung "upload_progress_".
session.upload_progress.name
string
$_POST[ini_get("session.upload_progress.name")]
nicht übergeben wird oder nicht verfügbar ist, wird kein
Upload-Fortschritt aufgezeichnet.
Grundeinstellung "PHP_SESSION_UPLOAD_PROGRESS".
session.upload_progress.freq
mixed
session.upload_progress.min_freq
int
session.lazy_write
bool
session.lazy_write
auf 1 gesetzt ist, werden
Daten nur gespeichert, nachdem sie sich geändert haben. Grundeinstellung
1 (aktiviert).
Der Upload-Fortschritt wird nur aufgezeichnet, wenn session.upload_progress.enabled aktiviert ist und die Variable $_POST[ini_get("session.upload_progress.name")] gesetzt ist. Siehe Session-Upload Fortschritt für weitere diesbezügliche Informationen.