Ich erstelle eine Website mit WordPress und möchte ihre Sitzungen huckepack nehmen. Aber ich finde keine Plugins oder sogar Dokumentation. Irgendwelche Vorschläge oder Referenzen, bevor ich anfange, es zu hacken?
Hinweis: Ich frage, ob und wie WP Standard-PHP-Sitzungen selbst verwendet, nicht wie PHP-Sitzungen hinzugefügt werden, z. B. mit session_start(). Anscheinend wird jeder Zustand, den WP aufrechterhält, auf andere Weise erreicht. Wenn ich also PHP-Sitzungen verwenden möchte, muss ich sie vollständig selbst hinzufügen und warten, indem ich Techniken wie die im Thread verwende.
Es ist eine sehr schlechte Idee zu modifizieren WP-Core Dateien für die Möglichkeit, Sitzungen zu verwenden. Der beste Weg, den ich gefunden habe, ist anzurufen session_start() von init Aktionshaken.
function kana_init_session() {
session_start();
}
add_action('init', 'kana_init_session', 1);
Du kannst es einlegen functions.php Datei Ihres Designs.
WordPress scheint nicht anzurufen session_start() weil es staatenlos sein will und wenn register_globals definiert ist, zerstört es automatisch Ihre $_SESSION
Danke – daraus habe ich gelernt, dass man session_start() selbst in wp_config aufrufen kann, was nicht durch Updates überschrieben wird. Aber besser noch, ich verwende wp_config, um eine Singleton-Instanz einer “Context”-Klasse zu instanziieren, die ich verwende, um eine Reihe von Dingen zu speichern, die ich hinzufüge (einschließlich z session_start(). Dein Hinweis hat es mir verdeutlicht. (Jetzt muss ich wp_settings mit seinem Patch pflegen, um $_SESSION beizubehalten, oder das konsolidierte “$input”-Array verwenden. Oder “Context” die Sitzungsvariablen pflegen und aktualisieren lassen.) Ich hasse es, wenn sie das tun.
Mit der Transient-API gespeicherte Werte sind für alle Benutzer sichtbar, nicht nur für den aktuellen Benutzer. Abhängig von der eindeutigen Kennung, die zum Abrufen des Transienten verwendet wird, können Sie jedem Benutzer eine eindeutige Kennung zuweisen, die im Wesentlichen dazu führt, dass sich ein Transient sehr ähnlich wie eine Sitzung verhält.
Weitere Überlegungen:
Abhängig vom Setup des Benutzers mit Objektcache usw. werden Transienten möglicherweise nicht immer in der DB gespeichert (z. B. Memcache). Die Verwendung von Transienten für Sitzungen kann dazu führen, dass die Daten sperrig werden und den Speicher schnell füllen (bei Verwendung von Memcached).
Für das, was ich tun muss, beinhaltet die beste Antwort:
Damit das Cookie für WordPress über Subdomains hinweg bestehen bleibt, installieren Sie das Root-Cookie Plugin.
sub1.domain.com hat WordPress; sub2.domain.com ist eine andere Seite. Von der anderen Seite (sub2), lese ich die Cookies, um festzustellen, wer der Benutzer ist und ob der Benutzer angemeldet ist.
Mit PHP kann ich die Cookies durchlaufen, analysieren key=>value Paare. Diese Cookies lassen mich das wissen [mshaffer] hat ein Cookie auf WordPress gespeichert und ist auch als authentifiziert logged_in. Der Ablauf des Cookies ist 1255298821.
Im sub2kann ich die Datenbank von WordPress abfragen und die Benutzerinformationen abrufen:
SELECT * FROM `wp_users` WHERE user_login = 'mshaffer' ... greifen Benutzer-ID, Benutzer Email aus dieser Abfrage
SELECT * FROM `wp_usermeta` WHERE user_id = '$user_id' ... Holen Sie sich viele andere Daten von wp
Mit diesen Informationen kann ich meine ergänzen sub2 Sitzungsvariable / Cookie und mache mit den Daten, was ich will. Ich kann erkennen, ob ich angemeldet bin, und meinen Benutzernamen … wodurch ich viele verschiedene Daten abrufen kann. Ich kann jetzt die WordPress-Authentifizierung in meiner verwenden sub2.domain.com und entsprechend umleiten.
Monte
{x:
WordPress scheint keine Sitzungen zu verwenden.
Der beste Weg, dies zu tun, besteht darin, die bereitgestellten Action-Hooks zu verwenden.
Du liegst völlig falsch, Anraiki. WordPress verwendet sicherlich Sessions. Und … zusätzlich, wenn Sie Ihre eigenen benutzerdefinierten Sitzungswerte verwenden möchten, gehen Sie wie folgt vor: Sie müssen die folgenden Zeilen oben hinzufügen wp-config.php if (!session_id()) { session_start(); } Fügen Sie dann die folgende Zeile oben hinzu header.php session_start();
– Alwin
2. November 2011 um 6:42 Uhr
WordPress verwendet Cookies, keine Sessions
– Ian Jamieson
5. März 2013 um 11:10 Uhr
WordPress verwendet standardmäßig keine Sitzungen.
– Brian C
23. Mai 2018 um 2:26 Uhr
Chirag Kalani
Haben Sie die Lösung hier überprüft, kann dies hier funktionieren und es ist auf einfache Weise möglich
Du liegst völlig falsch, Anraiki. WordPress verwendet sicherlich Sessions. Und … zusätzlich, wenn Sie Ihre eigenen benutzerdefinierten Sitzungswerte verwenden möchten, gehen Sie wie folgt vor: Sie müssen die folgenden Zeilen oben hinzufügen wp-config.php if (!session_id()) { session_start(); } Fügen Sie dann die folgende Zeile oben hinzu header.php session_start();
– Alwin
2. November 2011 um 6:42 Uhr
WordPress verwendet Cookies, keine Sessions
– Ian Jamieson
5. März 2013 um 11:10 Uhr
WordPress verwendet standardmäßig keine Sitzungen.
– Brian C
23. Mai 2018 um 2:26 Uhr
vmassuchetto
Hooken einer Funktion mit session_start() an wp_loaded scheint in diesem Fall zu funktionieren.
Bessere Lösung hier: wordpress.stackexchange.com/a/72744/20261
– kuzey beytar
16. November 2012 um 13:54 Uhr