Abmelden von passwortgeschützten WordPress-Seiten mit Cookie-Timeout?

Lesezeit: 2 Minuten

Ich verwende WordPress für einen bestimmten Kunden, weil er Inhalte selbst bearbeiten muss. Damit verwende ich ihren Seitenpasswortschutz auf Kundenwunsch. Das Problem ist, dass das gesetzte Cookie anscheinend nie abläuft. Sobald der Client also das Passwort eingibt, muss niemand das Passwort jemals wieder über denselben Browser auf derselben Maschine eingeben. Dies lässt es weit offen für jeden, zu dem man gehen und eintreten kann. Daher nehme ich an, dass der beste Weg, dies zu beheben, darin besteht, eine Zeitüberschreitung für das Cookie festzulegen. Ich bin mir jedoch nicht sicher, wie ich das mit der PHP-Funktion machen soll. Hier die ganze Funktion:

function post_password_required( $post = null ) {
    $post = get_post($post);

    if ( empty( $post->post_password ) )
        return false;

    if ( ! isset( $_COOKIE['wp-postpass_' . COOKIEHASH] ) )
        return true;

    require_once ABSPATH . WPINC . '/class-phpass.php';
    $hasher = new PasswordHash( 8, true );

    $hash = wp_unslash( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] );
    if ( 0 !== strpos( $hash, '$P$B' ) )
        return true;

    return ! $hasher->CheckPassword( $post->post_password, $hash );
}

Wirklich, ich möchte, dass das Cookie abläuft, wenn der Browser geschlossen wird, und ansonsten alle paar Stunden. Irgendwelche Ratschläge, was hinzugefügt werden muss, damit das Cookie nach dem Setzen abläuft?

Ich glaube, es müsste wahrscheinlich zu dieser Zeile hinzugefügt werden:

$hash = wp_unslash( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] );

Vielen Dank im Voraus für jeden Rat.

Es gibt einen viel, viel einfacheren Weg, dies zu tun, indem Sie die verwenden post_password_expires Filter. Standardmäßig läuft das Cookie 10 Tage nach der Erstellung ab. Um dies in ein Sitzungscookie umzuwandeln, geben Sie 0 zurück. Folgendes sollte zu Ihrem Thema hinzugefügt werden Funktionen.php:

function custom_password_cookie_expiry( $expires ) {
    return 0;  // Make it a session cookie
}
add_filter( 'post_password_expires', 'custom_password_cookie_expiry' );

  • Danke. Das funktioniert. Ich habe noch etwas in wp-login.php gefunden: $expire = apply_filters( ‘post_password_expires’, time() + 10 * DAY_IN_SECONDS ); Dies scheint jedoch nichts zu ändern, wenn ich die Einstellung time() ändere, mit oder ohne vorhandener benutzerdefinierter Funktion. Irgendeine Idee warum?

    Benutzer4215638

    10. November 2015 um 21:31 Uhr

  • Du solltest niemals Kern-WordPress-Dateien bearbeiten (d. h. irgendetwas außerhalb von /wp-content/ und wp-config.php). Es wird fast immer unbeabsichtigte Ergebnisse geben. Warum glauben Sie, dass Sie diese Funktion bearbeiten müssen?

    – rnevius

    10. November 2015 um 21:34 Uhr

  • “Warum glauben Sie, dass Sie diese Funktion bearbeiten müssen?” – Weil es einen Passwort-Cookie-Ablauf festlegt.

    Benutzer4215638

    10. November 2015 um 21:47 Uhr


  • Sie sollten dies mit einem Filter tun, wie in meiner Antwort oben beschrieben. Aufs Neue, Bearbeite niemals WordPress-Kerndateien. Sie können dieses Cookie entweder zeit- oder sitzungsbasiert erstellen … aber nicht beides (soweit mir bekannt ist).

    – rnevius

    10. November 2015 um 22:07 Uhr

  • Es ist ein Problem, zumal dies für einen Client gilt (es sei denn, Sie deaktivieren WordPress-Updates vollständig). Andernfalls können Änderungen an Core-Dateien während eines Core-Updates überschrieben werden. Es gibt Zeiten, in denen eine Bearbeitung des Kerns erforderlich ist … aber dies sollte nicht dazu gehören.

    – rnevius

    10. November 2015 um 22:10 Uhr

1002480cookie-checkAbmelden von passwortgeschützten WordPress-Seiten mit Cookie-Timeout?

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

Privacy policy