Beschreibung
Der WordPress-Core verwendet keine PHP-Sessions, aber manchmal sind sie für deinen Anwendungsfall, ein Plugin oder ein Theme erforderlich.
Dieses Plugin implementiert die nativen Session-Handler von PHP, die von der WordPress-Datenbank unterstützt werden. Dadurch können Plugins, Themes und benutzerdefinierter Code sicher PHP $_SESSION
s in einer verteilten Umgebung verwenden, in der die standardmäßige Speicherung von temporären PHP-Dateien nicht funktioniert.
Bitte beachte, dass die primäre Entwicklung auf GitHub stattfindet. Wenn du dazu beitragen möchtest:
https://github.com/pantheon-systems/wp-native-php-sessions
Mitwirken
Der beste Weg, zur Entwicklung dieses Plugins beizutragen, ist die Teilnahme am GitHub-Projekt:
https://github.com/pantheon-systems/wp-native-php-sessions
Pull-Requests und Fragen sind willkommen!
Du wirst feststellen, dass zwei Testsätze mit zwei verschiedenen Diensten laufen:
- Travis CI führt die Testsuite PHPUnit aus.
- Circle CI führt die Testsuite Behat gegen eine Pantheon-Seite aus, um die Kompatibilität des Plugins mit der Pantheon-Plattform sicherzustellen.
Beide Testsuiten können lokal ausgeführt werden, wobei der Umfang der Einrichtung variiert.
PHPUnit erfordert die Testsuite WordPress PHPUnit test suite, und Zugriff auf eine Datenbank mit dem Namen wordpress_test
. Wenn du die Testsuite noch nicht lokal konfiguriert hast, kannst du bash bin/install-wp-tests.sh wordpress_test root '' localhost
ausführen.
Behat benötigt eine Pantheon-Seite. Sobald du die Seite erstellt hast, musst du den Terminus installieren und die Umgebungsvariablen TERMINUS_TOKEN
, TERMINUS_SITE
und TERMINUS_ENV
setzen. Du kannst dann ./bin/behat-prepare.sh
ausführen, um die Seite für die Testsuite vorzubereiten.
Problembehandlung
Wenn du einen Fehler wie „Fatal error: session_start(): Failed to initialize storage module:“ oder „Warning: ini_set(): A session is active.“ erhältst, dann hast du wahrscheinlich ein Plugin, das eine Session startet, bevor WP Native PHP Sessions geladen wird.
Erstelle eine neue Datei in wp-content/mu-plugins/000-loader.php
und füge die folgenden Zeilen ein, um dieses Problem zu beheben:
<?php
require_once WP_PLUGIN_DIR . '/wp-native-php-sessions/pantheon-sessions.php';
Dieses mu-Plugin lädt WP Native PHP Sessions vor allen anderen Plugins, während du weiterhin den WordPress-Plugin-Updater verwenden kannst, um das Plugin auf dem neuesten Stand zu halten.
Installation
- Lade das Plugin in das
/wp-content/plugins/
-Verzeichnis hoch - Aktiviere das Plugin im „Plugins“-Menü in WordPress
Das war’s!
FAQ
-
Warum kein anderes Session-Plugin verwenden?
-
Dieses Plugin implementiert die eingebauten PHP-Sitzungsbehandlungsfunktionen, anstatt etwas Benutzerdefiniertes einzuführen. Auf diese Weise kannst du die eingebaute Sprachfunktionen wie
$_SESSION
superglobal undsession_start()
in deinem Code verwenden. Alles andere funktioniert dann von alleine. -
Warum die Sessions in der Datenbank speichern?
-
Die Fallback-Standardfunktionalität von PHP besteht darin, dass Sitzungen in einer temporären Datei gespeichert werden können. Das ist es, was der meiste Code, der Sessions aufruft, standardmäßig verwendet, und in einfachen Anwendungsfällen funktioniert, weshalb so viele Plugins dies auch nutzen.
Wenn du beabsichtigst, deine Anwendung zu skalieren, sind lokale temporäre Dateien eine gefährliche Wahl. Sie werden von den verschiedenen Instanzen der Anwendung nicht gemeinsam genutzt, was zu einem erratischen Verhalten führt, dass das Debuggen erschweren kann. Durch ihre Speicherung in der Datenbank wird der Zustand der Sitzungen von allen Anwendungsinstanzen gemeinsam genutzt.
Rezensionen
Mitwirkende & Entwickler
„WordPress Native PHP Sessions“ ist Open-Source-Software. Folgende Menschen haben an diesem Plugin mitgewirkt:
Mitwirkende„WordPress Native PHP Sessions“ wurde in 3 Sprachen übersetzt. Danke an die Übersetzerinnen und Übersetzer für ihre Mitwirkung.
Übersetze „WordPress Native PHP Sessions“ in deine Sprache.
Interessiert an der Entwicklung?
Durchstöbere den Code, sieh dir das SVN Repository an oder abonniere das Entwicklungsprotokoll per RSS.
Änderungsprotokoll
1.2.4 (September 14th, 2021)
- Die Blob-Größe für neue Session-Tabellen wurde von 64k auf 16M angehoben; Bereits existierende Tabellen benötigen eine manuelle Änderung der Spalte, wenn diese Änderung angewendet werden soll [#193 (engl.)].
1.2.3 (April 9th, 2021)
- Weist den Tabellennamen einer Variablen zu, bevor er in der Abfrage verwendet wird [#188].
1.2.2 (March 29th, 2021)
- Enthält eine automatisch inkrementierende
id
-Spalte zur Unterstützung der Replikation [#187].
1.2.1 (September 17th, 2020)
- Die Textdomäne des Plugins muss mit dem WordPress.org-Slug identisch sein [#169].
1.2.0 (May 18th, 2020)
- Vermeidet die Verwendung von Cookies für Sessions, wenn WP-CLI ausgeführt wird [#154].
1.1.0 (April 23rd, 2020)
- Vermeidet die Initialisierung von PHP-Sessions bei der Ausführung von cron [#149].
1.0.0 (March 2nd, 2020)
- Das Plugin ist stabil.
0.9.0 (October 14th, 2019)
- Refaktoriert die Session-Callback-Logik in der
Session_Handler
-Abstraktion, um den PHP-Hinweis in PHP 7.3 zu beheben [#135].
0.8.1 (August 19th, 2019)
- Korrigiert die Behandlung des ‚X-Forwarded-For‘-Headers in
get_client_ip_server()
[#126].
0.8.0 (August 13th, 2019)
- Respektiert verschiedene
HTTP_*
-Quellen für die Client-IP-Adresse [#122].
0.7.0 (April 3rd, 2019)
- Fügt eine Sicherheitsüberprüfung hinzu, die
$wpdb
wiederherstellt, wenn es fehlt.
0.6.9 (May 15th, 2018)
- Stellt sicher, dass
_pantheon_session_destroy()
einen Rückgabewert verwendet.
0.6.8 (May 4th, 2018)
- Wechselt zu
E_USER_WARNING
anstelle vonE_WARNING
, wenn Fehler ausgelöst werden.
0.6.7 (April 26th, 2018)
- Deaktiviert das Laden des Plugins, wenn
WP_INSTALLING
gesetzt ist, weil die Erstellung der Sitzungstabelle den Installationsprozess unterbricht.
0.6.6 (March 8th, 2018)
- Stellt die Sitzungsinstanziierung wieder her, wenn WP-CLI ausgeführt wird, da die Nichtausführung andere Probleme verursacht.
0.6.5 (February 6th, 2018)
- Deaktiviert die Session-Instanziierung, wenn
defined( 'WP_CLI' ) && WP_CLI
, weil die Sessions unter CLI nicht funktionieren.
0.6.4 (October 10th, 2017)
- Löst PHP-Fehler aus, wenn das Plugin die Session nicht in die Datenbank schreiben kann.
0.6.3 (September 29th, 2017)
- Gibt falsch zurück, wenn es uns völlig misslingt, eine Sitzung zu generieren.
0.6.2 (June 6th, 2017)
- Synchronisiert die Sitzungsbenutzerkennung, wenn sich ein Benutzer an- und abmeldet.
0.6.1 (May 25th, 2017)
- Fehlerbehebung: Verhindert Warnung session_write_close() expects exactly 0 parameters, 1 given.
0.6.0 (November 23rd, 2016)
- Fehlerbehebung: Verhindert einen fatalen PHP-Fehler in
session_write_close()
beim Ausführen der WordPress-shutdown
-Aktion, bevor$wpdb
sich selbst zerstört. - Fehlerbehebung: Speichert die tatsächliche Benutzer-ID in der Session-Tabelle anstelle von
(bool) $user_id
.
0.5
- Kompatibilität mit PHP 7.
- Fügt
pantheon_session_expiration
Filter hinzu, um den Ablaufwert der Sitzung zu ändern.
0.4
- Anpassung am
session_id()
-Verhalten für größere Kompatibilität - Verwendung der superglobal für REQUEST_TIME im Gegensatz zu
time()
0.3
- Behebt ein Problem im Zusammenhang mit der Ladefolge des WordPress-Plugins
0.1
- Erstveröffentlichung