web-dev-qa-db-fra.com

Comment faire la transition des cookies de .somdomain.domain.com vers .domain.com avec un impact minimal sur les utilisateurs?

Je dois étendre les cookies d'un sous-domaine.domaine.com à tous les sous-domaines de domain.com (.domain.com en termes de cookies).

J'essaie de minimiser l'impact de cette transition. Il semble que le fait de basculer le commutateur avec define('COOKIE_DOMAIN', '.domain.com'); dans wp-config laisse l'utilisateur dans un état d'incertitude - son cookie est suffisamment correct pour être validé, il ne sera donc pas déplacé vers la nouvelle étendue de domaine.

Des idées sur la façon dont je peux transférer les cookies de .subdomain.domain.com à .domain.com avec un impact minimal sur les utilisateurs?

Voici le code avec lequel j'ai échoué et avec lequel j'ai échoué. Il tente de valider les anciens cookies lorsqu'un hachage incorrect est détecté (après avoir modifié AUTH_KEY dans wp-config.php), puis tente de valider à nouveau et de les renvoyer d'où ils viennent:

function do_report_bad_hash( $cookie_elements ) {

    if( isset( $_COOKIE['wordpress_logged_in_'] ) ) {
        $user_id = wp_validate_auth_cookie( urldecode( $_COOKIE['wordpress_logged_in_']), 'logged_in' );

        setcookie( 'wordpress_logged_in_', '', 0, '/', '.subdomain.domain.com', false, true ); 
        unset( $_COOKIE['wordpress_logged_in_'] );

        setcookie( 'wordpress_', '', 0, '/', '.subdomain.domain.com', false, true ); 
        unset( $_COOKIE['wordpress_'] );

        if ( $user_id !== false ) {

            wp_set_auth_cookie($user_id);

            $redirect = ( strpos($_SERVER['REQUEST_URI'], '/options.php') && wp_get_referer() ) ? wp_get_referer() : $proto . $_SERVER['HTTP_Host'] . $_SERVER['REQUEST_URI'];

            header("Location: $redirect");    

        }

    } 

}
add_action('auth_cookie_bad_hash', 'do_report_bad_hash', 11, 1 );
3
editor

Cette réponse peut aider. Citer:

Le code de base dont vous avez besoin ici est celui-ci dans le fichier wp-config:

define('LOGGED_IN_COOKIE', 'login_cookie_name');
define('AUTH_COOKIE','auth_cookie_name');
define('COOKIE_DOMAIN', '.example.com');
define('COOKIEHASH', 'random_hash_here');

Mettez cela dans la configuration sur plusieurs sites, définissez les clés et les sels pour qu'ils soient identiques, et vous obtiendrez des cookies de connexion qui fonctionneront sur le domaine et les sous-domaines.

2
edzillion