web-dev-qa-db-fra.com

Définissez les cookies d'authentification pour qu'ils soient plus courts, mais qu'ils s'étendent à chaque chargement de page.

J'essaie de contourner la méthode par ailleurs très peu sûre de Wordpress qui gère les cookies d'authentification. Je veux dire, avoir le cookie expirer dans 2 semaines seulement si je construis un site d'adhésion n'est évidemment pas correct, mais en même temps, le faire expirer dans 15 minutes lorsque l'utilisateur est connecté serait plus qu'ennuyeux.

J'ai effectué des recherches et des tests approfondis, puis réduit la forêt de codes quelque peu compliquée autour de cela dans Wordpress au fichier pluggable.php du dossier wp-includes et trouvé la fonction wp_set_auth_cookie à la ligne 652 (v 3.5.1). Maintenant, cela me donne la possibilité de changer les heures, mais celles-ci sont, comme mentionné ci-dessus, fixées à l'heure de connexion, au lieu de la dernière activité de l'utilisateur.

J'ai essayé d'ajouter cette fonction ou la fonction wp_signon à l'aide de celle-ci dans mon en-tête, mais cela n'a pas fonctionné.

Un plugin ou un crochet ou quelque chose que vous pouvez penser qui m'aiderait avec ça?

Merci beaucoup pour votre aide à l'avance!

EDIT (6 juin 2013):

J'ai essayé avec le code suivant dans le fichier functions.php de mon modèle, mais si on me déconnecte lorsque je recharge la page, les cookies d'authentification ne sont pas renouvelés. La question peut être avec les arguments ($userinnow, $remember, $secure) qui, par ailleurs, je n'ai pas besoin/utiliser, à l'exception de $userinnow.

/* Renew cookie at every page load */
function renew_wp_cookie() {

    global $current_user;
    get_currentuserinfo();
    $userinnow = $current_user->user_login;
    if (is_user_logged_in()) {
        wp_set_auth_cookie($userinnow, $remember, $secure);
    }
    else wp_clear_auth_cookie();

}

add_action('init', 'renew_wp_cookie');
1
webeno

Vous n'avez pas besoin de réécrire wp_set_auth_cookie(), cela vous permet de modifier l'heure d'expiration du cookie:

add_filter( 'auth_cookie_expiration', 'wpse101378_change_expire_time', 3 );
function wpse101378_change_expire_time( $expire, $user_id, $remember ){
    //The $remember variable indicates whether the user has elected
    //to be 'remembered'.
    //By default, if true, WP sets expire to 14 days if false, 2 days

    //$expire is time in seconds

    return 24*60*60;
}

Si vous souhaitez effacer le cookie actuel, vous pouvez utiliser wp_clear_auth_cookie() (voir source )

3
Stephen Harris