jQuery prüfen wordpress_logged_in-Cookie

Lesezeit: 5 Minuten

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

Benutzer-Avatar
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:

in der functions.php:

function ajax_check_user_logged_in() {
    echo is_user_logged_in()?'yes':'no';
    die();
}
add_action('wp_ajax_is_user_logged_in', 'ajax_check_user_logged_in');
add_action('wp_ajax_nopriv_is_user_logged_in', 'ajax_check_user_logged_in');

function load_my_scripts()
{
    wp_localize_script('my-ajax-handle', 'the_ajax_script', array('ajaxurl' => admin_url('admin-ajax.php')));
}

add_action('wp_enqueue_scripts', 'load_my_scripts');

im js:

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
    }
});

Ähnliches Thema hier

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().

Benutzer-Avatar
Ty Bailey

Wie in einer anderen Antwort erwähnt, wp_localize_script() ist eine nützliche Funktion. Ich benutze das, speziell:

wp_localize_script(
    'site-js',
    'siteVars',
    array(
        'ajaxurl' => admin_url( 'admin-ajax.php' ),
        'isMobile' => (wp_is_mobile() ? true : false),
        'isHome' => (is_home() || is_front_page() ? true : false),
        'isSingle' => (is_single() ? true : false),
        'isLogged' => (is_user_logged_in() ? true : false),
    )
);

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.

https://developer.wordpress.org/reference/functions/is_user_logged_in/

https://codex.wordpress.org/Function_Reference/wp_localize_script

Benutzer-Avatar
StudioHeads

Wenn Sie Zugriff auf Ihre .HTACCESS-Datei haben, fügen Sie diesen Code hinzu.

Es prüft, ob das standardmäßig angemeldete WordPress-Cookie vorhanden ist, und wenn ja, setzt es das Cookie “Hallo”.

Wenn es erkennt, dass das „wordpress_logged_in“-Cookie nicht vorhanden ist, wird das „hello“-Cookie entfernt/abgelaufen.

<If "%{HTTP_COOKIE} =~ /wordpress_logged_in/">
        Header add Set-Cookie "hello;secure;path=/"
</If>

<If "%{HTTP_COOKIE} !~ /wordpress_logged_in/">
       Header add Set-Cookie "hello;secure;Expires=Wed, 21 Oct 1963 07:28:00 GMT"
</If>

HttpOnly ist nicht auf “Hallo”-Cookie gesetzt, daher können Sie per Javascript darauf zugreifen.

1382810cookie-checkjQuery prüfen wordpress_logged_in-Cookie

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy