Es gibt eine Möglichkeit, WordPress-Cookies zu überprüfen wordpress_eingeloggt_in mit jquery?
Ich verwende das vollständige Cloudflare-Caching, daher gibt es keine Möglichkeit zu überprüfen, ob der Benutzer angemeldet ist oder nicht, als dieses Cookie. Ich habe versucht, es mit jquery zu lesen, scheint aber geschützt und nicht sichtbar zu sein. Ich kann nur mit PHP darauf zugreifen.
So kann ich es jetzt lesen:
$logged_in = 'no';
if (count($_COOKIE)) {
foreach ($_COOKIE as $key => $val) {
if (preg_match("/wordpress_logged_in/i", $key)) {
$logged_in = 'yes';
}
}
}
Vielleicht gibt es eine Möglichkeit, es einfach per jquery zu überprüfen, aber ich habe nicht gefunden, wie.
Danke fürs Helfen
Wenn Sie überprüfen möchten, ob der Benutzer in zwischengespeicherten Seiten angemeldet ist, müssen Sie Javascript und kein serverseitiges Skript verwenden. Ich habe versucht, das wp-settings-time-Cookie von js zu überprüfen, aber es wird auch angezeigt, nachdem ich mich abgemeldet habe , über den Standard-Logout-Link in der Admin-Leiste, also wie kann das eine gute Lösung sein?
– Noam
27. Mai 2019 um 23:38 Uhr
Samvel Aleqsanyan
Sie können nicht auf WordPress-Cookies mit dem Namen zugreifen wordpress_logged_in verwenden js/jquery nur weil es so gekennzeichnet ist HttpOnly:
Ein sicheres Cookie wird nur mit einer verschlüsselten Anfrage über das HTTPS-Protokoll an den Server gesendet… Um Cross-Site-Scripting-Angriffe (XSS) zu verhindern, sind HttpOnly-Cookies für die Document.cookie-API von JavaScript unzugänglich; Sie werden nur an den Server gesendet.
Aber seit 3.0 WordPress fügen Sie ein weiteres Cookie mit dem Namen hinzu wp-settings-{time}-[UID] wenn sich der Benutzer anmeldet:
WordPress setzt auch ein paar wp-settings-{time}-[UID] Kekse. Die Zahl am Ende ist Ihre individuelle Benutzer-ID aus der Benutzer-Datenbanktabelle. Dies wird verwendet, um Ihre Ansicht der Admin-Oberfläche und möglicherweise auch der Hauptseitenoberfläche anzupassen.
Und Sie können dieses Cookie mit erhalten js/jquery. Sie können also sogar eine Benutzer-ID von Cookies erhalten.
Hier funktioniert die js-Funktion zum Abrufen von Cookies und zum Überprüfen, ob der Benutzer angemeldet ist:
function getLoggedInCookie() {
var cookie = document.cookie.indexOf('wp-settings-time') !== -1;
if(cookie){
alert('Logged in');
}else{
alert('Not User');
}
}
getLoggedInCookie();
jQuery-Lösung wird enthalten sein Cookie-Plugin zu Ihrem WordPress-Theme/Plugin und versuchen Sie es zu verwenden (möglicherweise müssen einige Änderungen vorgenommen werden).
HINWEIS:
Der bereitgestellte Code funktioniert mit Anmeldeformularen, die standardmäßige WordPress-Funktionen und -Endpunkte verwenden, wie z http://{website-name}/wp-admin/ oder http://{website-name}/wp-login.php. Plugins von Drittanbietern konnten die genannten Cookies nicht setzen wp-settings-{time}-[UID].
Wenn ich WooCommerce verwende, das über ein eigenes Anmeldeformular verfügt, funktioniert die akzeptierte Antwort bei mir nicht, da beim Anmelden keine Cookies verfügbar sind, auf die Skripts zugreifen können. Die Lösung besteht darin, ein solches zusätzliches Cookie beim Anmelden zu erstellen und beim Abmelden zu entfernen. In dieser Antwort von Janos Szabo wird gezeigt, wie: wordpress.stackexchange.com/questions/69814/…
– Ryszard Jędraszyk
19. April 2019 um 0:33 Uhr
wp-settings-time-Cookie ist nicht vorhanden
– Federico Schiocchet
13. Dezember 2021 um 22:04 Uhr
@FedericoSchiocchet Es ist da. Nicht sicher, wie Sie überprüft haben. Aber ohne weitere Details kann ich nicht helfen
– Samvel Aleqsanyan
19. Januar um 0:07
Wenn Sie nur wissen möchten, ob ein Benutzer angemeldet ist, können Sie überprüfen, ob das body-Element die Klasse „eingeloggt“ hat, dh
jQuery( 'body' ).hasClass( 'logged-in' )
WordPress fügt diese Klasse dem Body-Element hinzu, wenn ein Benutzer angemeldet ist.
Dies funktioniert nicht, wenn der Text der HTML-Seite zwischengespeichert wird.
– Ramon Fincken
25. November 2020 um 9:41 Uhr
Sie können eine Ajax-Anfrage erstellen, um zu überprüfen, ob der Benutzer angemeldet ist:
var data = {
action: 'is_user_logged_in'
};
jQuery.post(the_ajax_script.ajaxurl, data, function(response) {
if(response == 'yes') {
// user is logged in
} else {
// user is not logged in
}
});
Diese Lösung wird für Sie funktionieren. Oder Sie können eine Aktion hinzufügen Login-Aktion und erstellen Sie js var für Ihre Datei mit wp_localize_script().
Ty Bailey
Wie in einer anderen Antwort erwähnt, wp_localize_script() ist eine nützliche Funktion. Ich benutze das, speziell:
Dann können Sie in Ihrem Site-Skript darauf zugreifen, z siteVars.isLogged was den korrekten booleschen Wert zurückgibt. Legen Sie dies in Ihre functions.php Datei. Ich ziehe es vor, dies in einer Funktion zu platzieren und direkt auszuführen, nachdem Sie Ihre Skripts in die Warteschlange gestellt haben.
Du könnte in der Lage sein, ein Skript wie z js-Cookie — Ich habe dieses Skript mehrmals verwendet, um Cookie-Daten über WP zu setzen/zu lesen. Obwohl die erste Methode mit wp_localize_script() ist wohl zuverlässiger. Wenn die Cookie-Daten geschützt sind, funktioniert die JS-Lösung möglicherweise nicht. Die PHP-Lösung ist eine sichere Sache. Sie könnten es sogar erweitern, um die Benutzerrolle und Benutzerinformationen zu erhalten.
Wenn Sie überprüfen möchten, ob der Benutzer in zwischengespeicherten Seiten angemeldet ist, müssen Sie Javascript und kein serverseitiges Skript verwenden. Ich habe versucht, das wp-settings-time-Cookie von js zu überprüfen, aber es wird auch angezeigt, nachdem ich mich abgemeldet habe , über den Standard-Logout-Link in der Admin-Leiste, also wie kann das eine gute Lösung sein?
– Noam
27. Mai 2019 um 23:38 Uhr