Cookie Lebensdauer beschränken

  • Hallo zusammen ich habe eine Geschützte Seite erstellt mit Passwort.
    Nach Eingabe des Passworts wird ja ein Cookie gespeichert, so dass man das Passwort nicht immer eingeben muss.
    Nur mir sind 10 Tage Lebensdauer dieses Cookies etwas lange!
    Habe mal folgenden Code in mein functions.php kopiert:

    PHP
    add_action( 'wp', 'post_pw_sess_expire' );
    function post_pw_sess_expire() {
        if ( isset( $_COOKIE['wp-postpass_' . COOKIEHASH] ) )
        // Setting a time of 0 in setcookie() forces the cookie to expire with the session
        setcookie('wp-postpass_' . COOKIEHASH, '', 0, COOKIEPATH);
    }

    Wie es als Lösungvorschlag auf dieser Seite geschrieben ist.

    Nur das ganze funktioniert nicht, es sind immer noch 10 Tage!
    Weiss jemand wie man das richtig auf eine vernünftige Dauer stellen kann?

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • [FONT=arial]Das wird so auch nicht funktionieren. Ich befürchte Du musst über den [COLOR=#000000]the_password_form filter an die Sache ran gehen um den Cookie beim setzen zeitlich zu beschränken. Der WP hook (ohne es geprüft zu haben) dürfte der falsche Zeitpunkt sein.[/COLOR][/FONT]

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Ich glaube der Zeitpunkt ist nicht mal so wichtig, da das cookie einfach überschrieben wird, oder verstehe ich das falsch?

    Hab noch ein bisschen gesucht, und dabei gesehen das es einen "Filter" gibt für "post_password_expires", hier die Stelle im Source-Code. Im Moment verstehe ich aber nicht wie ich so einen apply_filters verwenden muss!
    Kann mir jemand ein Beispiel geben, wie ich das verwende?

    Muss das auch in meine functions.php, muss ich das irgendwie mit einer action verknüpfen? Oder wie geht das?

  • Ein Cookie muss gesetzt werden bevor irgendein Output erfolgt (no headers sent). Daher muss der Ablauf mit dem Setzen definiert werden. Ein Update des Cookies zeigt erst Wirkung beim nächsten Pageload.

    Den Filter post_password_expires kannte ich noch nicht. Es macht mich stutzig, dass im gesamten Core (3.9.1 durchsucht) kein add_filter('post_password_expires', 'irgendeine_core_funktion') existiert. Der Sinn erschließt sich mir nicht so richtig, denn apply_filters arbeitet alle Filter in der queue ab und diese Filter müssen vorab mit add_filter definiert worden sein. Zumindest habe ich es so vor langer Zeit verinnerlicht (was nicht heißen muss, dass es stimmt).

    Das Thema muss ich mal in Ruhe durchdenken.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Ein Cookie muss gesetzt werden bevor irgendein Output erfolgt (no headers sent). Daher muss der Ablauf mit dem Setzen definiert werden. Ein Update des Cookies zeigt erst Wirkung beim nächsten Pageload.


    Das wäre im Prinzip ja nicht mal so schlimm, da das Cookie im Prinzip eh nur für "Wieder-Besucher" ist, die dann das Passwort nicht jedesmal eingeben müssen. Für mich wäre eine Cookie-Lebensdauer von 2-3 Tagen gut

    Es sind wohl bei weitem nicht alle Filter dokumentiert bei Wordpress, hab immer mehr das Gefühl die Dokumentation ist fürchterlich unvollständig. Ich würde ja gerne auch in Englisch lesen ;) Viele Funktionen muss man irgendwie selber mit Filtern/Hooks nachrüsten, teilweise etwas mühsam, darum auch die riesen Plugin-Flut...

    Danke fürs durchdenken!

  • Gemeinsam geht alles besser.

    Viele Funktionen muss man irgendwie selber mit Filtern/Hooks nachrüsten, teilweise etwas mühsam, darum auch die riesen Plugin-Flut...

    Das hat mich auf eine Idee gebracht die tatsächlich funktioniert. Ob das so gewollt ist steht auf einem anderen Blatt Papier.

    Folgender Code geht in die functions.php:

    Code
    add_filter( 'post_password_expires', 'mensmaximus_expire_me' );
    function mensmaximus_expire_me() {
        return time() + 1 * DAY_IN_SECONDS;
    }

    Nach dem Aufruf einer passwortgeschützen Seite hatte mein wp-postpass_tralala Cookie eine Laufzeit von einem Tag.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

    Einmal editiert, zuletzt von mensmaximus (1. August 2014 um 00:28)

  • Danke dir das funktioniert, und ich glaube es ist gewollt!
    Der Kommentar im Source-Code empfiehlt ja einen Filter zu machen. Wie ja so schön oben steht:

    Zitat

    [h=3]Understanding Source Code[/h] The best way to understand what a hook does is to look at where it occurs in the source code.

    • Action hooks look like this: do_action( "hook_name" )
    • Filter hooks look like this: apply_filters( "hook_name", "what_to_filter" ).


    Remember, this hook may occur in more than one file. Moreover, the hook's context may change from version to version.

    Nur mein Problem war, dass ich gedacht habe die Syntax wäre "apply_filters(...)", dir richtige Funktion ist aber add_filter wie du sie verwendet hast.
    Nun ist mir auch klar geworden do_action muss man wohl mit add_action ansprechen.

    Sehr praktisch diese Seite mit allen Hooks.

  • Danke dir das funktioniert, und ich glaube es ist gewollt!
    Der Kommentar im Source-Code empfiehlt ja einen Filter zu machen. Wie ja so schön oben steht:


    Nur mein Problem war, dass ich gedacht habe die Syntax wäre "apply_filters(...)", dir richtige Funktion ist aber add_filter wie du sie verwendet hast.
    Nun ist mir auch klar geworden do_action muss man wohl mit add_action ansprechen.

    Sehr praktisch diese Seite mit allen Hooks.

    vielleicht hilft dir diese Unterscheidung

    http://codex.wordpress.org/Function_Reference/apply_filters

    http://codex.wordpress.org/Function_Reference/add_filter

    für zukünftige "Hooks" und "Hacks" :-)

  • Monika die Codex-Seiten habe ich mir schon angeschaut!
    Nur war mir die Beziehung zwischen diesen beiden Funktionen nicht klar. Der Verweis von apply_filters zu add_filter ist nicht sehr deutlich.
    Ich habe schon viele Codex-Seiten gelesen bei meinen Google-Suchen, sonst hätte ich auch den "post_password_expires" Filter nicht gefunden.
    Viele Probleme löst man bei Wordpress indem man irgendwelche Funktionen/Filters seiner functions.php hinzufügt, dabei aber nie lernt warum/weshalb. Aber jetzt ist mir das mit den Hooks auch klarer geworden.

    PS: Ich finde die Dokumentation von Wordpress teilweise nicht so gut, aber okay man lernt damit zu leben. Ich fange ja gar an mit Source-Code anschauen ;)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!