Wenn ich dies tun müsste, würde ich mein eigenes Cookie verwenden, um die Anmeldung zu bestimmen, und WordPress nur laden, um es bei Bedarf zu überprüfen.
Das Cookie wordpress_logged_in_ {some-hash} kann verwendet werden, um den Benutzer zu bestimmen, und WordPress verwendet es, um denselben zu bestimmen. Sie können dies nicht einfach erneut implementieren, aber Sie können es verwenden, ohne WordPress bei mehreren Anforderungen zu laden.
Hier ist zum Beispiel mein Cookie-Hash (vollständig erfundene Daten, aber realistisch):
key: wordpress_logged_in_1234567890abcdef1234567890abcdef
value: admin|1234567890|abcdef1234567890abcdef1234567890
Die Art und Weise, wie WordPress weiß, wie dieses Cookie gültig ist, spielt keine Rolle. Sie müssen lediglich wissen, ob es einmal gültig ist, und dann unterschreiben Sie es mit einem Geheimnis.
Zum ersten Mal ist der Benutzer also noch nicht bewiesen. Sie laden wp-load.php und WP validiert das Cookie und meldet den Benutzer an. Sie tun nun alles, um sich selbst zu beweisen, dass der Benutzer angemeldet ist, und setzen dann Ihr eigenes Cookie. Der Schlüssel kann alles sein, was für Sie benutzerdefiniert ist, der Wert, den Sie mit einem geheimen Schlüssel mithilfe der Funktion hash_hmac in einen Message Digest umwandeln.
$key = ... // the key from the WP cookie
$value = ... // the value from the WP cookie
$hash = hash_hmac ( 'md5' , $key.$value , 'some secret key' );
Sie erhalten Kauderwelsch zurück, das Sie mit setcookie () an sie zurücksenden. Bei zukünftigen Anfragen senden sie diesen Cookie an Sie zurück. Sie können dies zuerst überprüfen und mit derselben Hash-Funktion und demselben geheimen Schlüssel validieren.
Nur Sie können den Hash generieren, da nur Sie den geheimen Schlüssel kennen. Wenn sie also einen gültigen Hash zurücksenden, der auch mit dem übereinstimmt, was sie für ihr WP-Cookie senden, wissen Sie, dass sie zuvor über Ihren Code mit WP validiert wurden, und Sie können den Benutzernamen direkt von diesem Wert abrufen (es ist der erste offensichtlich ein Teil des Cookies). Dann müssen Sie WP nicht laden.
Der geheime Schlüssel BTW sollte lang und zufällig sein . Kein kurzes Passwort. Kein Wörterbuchwort. Nur großer unsinniger Kauderwelsch. Leitungsrauschen und viel davon. Beispielschlüssel:
'GHY5hFNqq4Ntdu=3:SUp8#/+_W!- @@^@xslN*L|N+Vn;(1xo8jNyp,au$v9Ki5*'
Für Wordpress 4.9: Da ich keinen Kommentar abgeben kann (neuer Benutzer). Die letzte Lösung (einzelne WP-Installation), die ich zum Erstellen
is_user_logged_in()
undcurrent_user_can()
Arbeiten verwende, ist wie folgt. Wir überspringenrequire('wp-load.php')
zuerst (um wp () in load-blog-header.php zu überspringen) undABSPATH
werden dann konstant und enthalten manuell genau alle benötigten Dinge .Die manuelle Verwendung von
define('SHORTINIT', true)
+require('wp-load.php')
+ umfasst:Pageload: 1.05 sek - enthaltene Dateien: 43 Dateien
Vergleichen: NUR mit
require('wp-load.php')
:Pageload: 1.35 sek - enthaltene Dateien: 419 Dateien
Der Zeitunterschied (0,3 Sek.) Kann sich von Installationen und PHP-Engines unterscheiden, aber während die Validierung vieler Anfragen auf einer Seite - Dinge summieren sich!
Denken Sie daran, den relativen Aufruf des installierten WP-Verzeichnisses zu verwenden. Aus einem benutzerdefinierten Wordpress-Plugin-Verzeichnis sollte innerhalb einer Unterverzeichnisebene bei normaler Installation ein Pfad wie folgt aussehen:
Dann:
Danach kann auf die Benutzerüberprüfung zugegriffen werden. Bei anderen Aufgaben, bei denen ein oder zwei Anforderungen nicht erfüllt werden , ist das Aufspüren anderer benötigter Dateien möglicherweise nicht 0,3 Sek. Wert. Überspringen Sie die
SHORTINIT
Konstante und manuelle Unordnung.quelle
Wordpress selbst ist nur ein- oder ausgeschaltet. Manchmal, aber das ist nur zufällig und nicht beabsichtigt, können Sie das umgehen. Aber in Ihrem Fall bin ich mir nicht sicher, ob es möglich ist.
Anstatt zu
wp-blog-header.php
versuchen, nur die WP-Funktionen zu laden, schließen Siewp-load.php
stattdessen ein. Vielleicht hilft das.quelle
wp-blog-header.php
Grundsätzlichwp-load.php
wird geladen, so dass es keinen Unterschied gibt ...wp();
was eigentlich ziemlich teuer ist.wp-load.php
statt gemachtwp-blog-header.php
, alles scheint gut zu funktionieren, aber die Ladezeit ist die gleiche.Sie können versuchen, direkt auf die Tabelle zuzugreifen. Wenn Sie das Salz der Passwortdateien kennen, können Sie sie über Ihr eigenes System anmelden, salzen Sie das Passwort selbst (sehen Sie, wie WordPress es macht) und verfolgen Sie sie selbst. Wenn Sie die Möglichkeit haben möchten, ohne erneute Authentifizierung zwischen Ihrem eigenen System und WordPress zu wechseln, können Sie ein Plugin für WordPress erstellen, das die aktuelle Benutzersitzung an Ihr System weiterleitet.
quelle
Das schnellste, was Sie mit WP erreichen können, ist die Erstellung eines benutzerdefinierten Wrappers, der den
SHORTINIT
Kern definiert und dann lädt. Dadurch wird die Kernlast direkt nach dem Verbinden der Datenbank und vor der Verarbeitung der meisten APIs und Erweiterungen (Design und Plugins) gestoppt.Von dort aus können Sie versuchen, nur über die Datenbank zu gelangen oder Teile des Kerns, die Sie benötigen, selektiv zu laden.
Dies ist ein ziemlich chaotischer Ansatz, aber er kommt einer leichteren Kernlast so nahe, wie es in WP nur geht.
quelle
Anscheinend gab es bereits Diskussionen darüber. Überprüfen Sie die Updates unter: https://core.trac.wordpress.org/ticket/37584
quelle
Wenn Sie nur allen Wordpress-Benutzern die Verwendung der Web-App erlauben möchten, können Sie das Wordpress-Benutzerverwaltungssystem verwenden und nur prüfen, ob der Benutzer angemeldet ist oder nicht.
Um dies zu überprüfen, müssen Sie überprüfen, ob das genannte Cookie
wordpress_logged_in_{some-hash}
vorhanden ist. Wenn nicht, leiten Sie den Benutzer zur Wordpress-Anmeldeseite weiter. Der{some-hash}
Teil des Cookie-Namens besteht nur aus einer Reihe von Buchstaben und Ziffern.quelle