Restrict Cookie

Wer Wordpress einfach nur nutzt, wundert sich manchmal, mit welcher Magie das System einen wieder erkennt. Akut habe ich einen Fall, bei dem ein geschützter Bereich eingerichtet wurde, aber tagelang nicht nach einem Passwort gefragt wird.

Cookies

Wordpress benutzt Cookies, um den Nutzer während einer Session immer wieder zu identifizieren. Solange der Nutzer sich also nicht abmeldet und seinen Browser offen läßt, solange sendet sein Browser eine Kennung an den Webserver. Anhand dieser Kennung identifiziert das CMS den Nutzer und weist ihm die richtigen Rechte zu.

Wählt man zusätzlich "Erinnere Dich an mich", wird ein Cookie konstruiert, der dauerhaft im Browser gespeichet wird. Die Voreinstellung für die Lebensdauer von Cookies ist zwei Wochen.

Natürlich hat sich der Nutzer bei der Erstellung des geschützten Seite angemeldet. Wordpress übersendet ihm einen Cookie, um ihn wiederzuerkennen. Als Eigentümer der Seite bekommt der Nutzer deswegen die Passwortabfrage nie zu sehen. Dies ist verwirrend.

Lebenserfahrung

Die implizite Annahme, eine Anmeldung sei jeden Tag neu nötig, wird durch die Voreinstellungen von Wordpress verletzt.

Diese Annahme entstammt der allgemeinen Lebenerfahrung, sich an seinem Betriebssystem jeden Tag anmelden zu müssen, nachdem man den Rechner eingeschaltet hat. Es ist nicht einzusehen, warum andere System nicht diesem Rhytmus unterliegen.

Andererseits ist es nicht einzusehen, warum man sich neu anmelden muß, wenn man den Browser beendet und neu startet. Schließlich ist der Browser ja solange ohne Passwortabfrage startbar, wie man am System selbst angemeldet ist.

Der Nutzer setzt also die Anwendung im Browser mit der Browsersoftware gleich.

Lebensdauer

Es wird also gewünscht die Lebensdauer einer automatischen Anmeldung (Wiedererkennung) auf die Arbeit eines Tages zu begrenzen. Wenn man an mehreren Tagen am CMS arbeiten will, muß man sich halt täglich neu anmelden.

Ein Blick in den Sourcecode von WordPress zeigt, wie die Cookies zu ihrer Lebensdauer kommen:

function wp_set_auth_cookie($user_id, $remember = false, $secure = '') {
  if ( $remember ) {
    $expiration =
        $expire = time() +
      apply_filters('auth_cookie_expiration', 1209600, $user_id, $remember);
  } else {
    $expiration = time() +
      apply_filters('auth_cookie_expiration',  172800, $user_id, $remember);
    $expire = 0;
  }

Mit "Erinnere Dich an mich" hat ein Cookie also 14 Tage, sonst 2 Tage zu leben. Und das muß geändert werden.

Glücklicherweise sieht WordPress bereits einen Hook für die Änderung vor. Es genügt also ein kleines Plugin zu schreiben, das diesen Wert abändert.

$ cat > wp-content/plugins/restrict-cookie.php
<?php
/**
 * @package Restrict_Cookie
 * @version 0.1
 */
/*
Plugin Name: Restrict Cookie
Plugin URI: http://lutz.donnerhacke.de/Blog/Restrict-Cookie
Description: Limit the lifetime of the cookie to a given value
Author: Lutz Donnerhacke
Version: 0.1
Author URI: http://lutz.donnerhacke.de/
*/

function restrict_cookie_set() {
        $years   = 0;
        $months  = 0;
        $weeks   = 0;
        $days    = 0;
        $hours   = 10;
        $minutes = 0;
        $seconds = 0;

        return ($seconds +
                60*($minutes +
                    60*($hours +
                        24*(    $days   +
                              7*$weeks  +
                             30*$months +
                            365*$years
                           )
                       )
                   )
               );
}


add_filter( 'auth_cookie_expiration', 'restrict_cookie_set' );

?> 

Das Plugin taucht sofort im Administrationsinterface auf und kann aktiviert werden.

Und wie paßt man die Werte an? Schließlich ist das Plugin minimal, es enthält keine neuen Webseiten für das Administrationsinterface, keine Einstellknöpfe, keine Regler.

Und da habe ich mir die Arbeit einfach gemacht. Man klickt im Administrationsinterface der Plugins auf "Bearbeiten".

Fertig.

Post a comment

Verwandter Inhalt