web-dev-qa-db-fra.com

l'action wp_logout ne fonctionne pas

J'essaie de supprimer certains cookies configurés pour contrôler la connexion persistante lorsque l'utilisateur souhaite se déconnecter d'un site Web.

Je pensais que ce serait aussi simple que:

function remove_user_cookie() {

    unset($_COOKIE['woai']);
    unset($_COOKIE['woak']);

}
add_action('wp_logout', 'remove_user_cookie');

J'ai aussi essayé:

function remove_user_cookie() {

    if( $_GET['action'] == 'logout' ) :

        unset($_COOKIE['woai']);
        unset($_COOKIE['woak']);

    endif;

}
add_action('wp_logout', 'remove_user_cookie');

Cependant, les cookies des utilisateurs restent en place, ils continuent donc à se reconnecter automatiquement.

Je ne sais pas si l'action wp_logout ne fonctionne pas ou si elle entre en conflit avec mon code qui connecte automatiquement l'utilisateur.

En ce moment, j'ai ceci dans le header.php:

<?php if( !is_user_logged_in() ) :

    // check if user has cookies
    if ( isset($_COOKIE['woai']) && isset($_COOKIE['woak']) ) :

        $args = array(
            'meta_key' => 'login_key',
            'meta_value' => $_COOKIE['woak'],
            'meta_compare' => '=',
            'fields' => 'ID',
            'include' => $_COOKIE['woai']
        );
        $user_query = new WP_User_Query($args);

        if( $user_query->results[0] != '' || $user_query->results[0] != NULL ) :

            // get user id and login name
            $user_id = $user_query->results[0];
            $user_login = get_user_by( 'id', $user_id );

            // log the user in
            wp_set_current_user( $user_id, $user_login->user_login );
            wp_set_auth_cookie( $user_id );

            do_action( 'wp_login', $user_login->user_login );

        endif;

    endif; // end if cookies

endif; ?>

Et lorsque l'utilisateur est connecté, il reçoit un nouvel ensemble de clés avec ceci:

function set_user_cookie($user_login) {

    // if they have cookies, delete them
    if ( isset($_COOKIE['woai']) && isset($_COOKIE['woak']) ) :
        unset($_COOKIE['woai']);
        unset($_COOKIE['woak']);
    endif;

    $user_id = get_user_by( 'login', $user_login );

    // generate new key for user
    $salt = wp_generate_password(20); // 20 character "random" string
    $key = sha1($salt . $email . uniqid(time(), true));

    // set new cookies
    setcookie("woai", $user_id->ID, time()+31536000);  /* expire in 1 year */
    setcookie("woak", $key, time()+31536000);  /* expire in 1 year */

    // update the db
    update_field('field_53c3de9cd031e', $key, 'user_'.$user_id->ID.'');

}
add_action('wp_login', 'set_user_cookie', 10, 1);
3
lukeseager

pls essayez ci-dessous le code

function remove_user_cookie() {

setcookie("woak");
setcookie("woai");

}
add_action('wp_logout', 'remove_user_cookie');

à part pourquoi vous utilisez un cookie pour stocker une valeur? vous suggère d'utiliser la session

1
TBI Infotech

(J'ai créé un identifiant persistant pour mon client, un identifiant pour deux sites WordPress, sur prestashop et trois applications php personnalisées). J'ai eu le même défi mais c'est comme ça que je l'ai résolu.

Premier pas

add_action('wp_logout', 'doMyLogoutCall');
add_action('init', 'runInitLogoutProcess');

deuxième étape

function doMyLogoutCall()
{?>
 <img style="display:none" src="<?php echo home_url();
    ?>?loadwordpressbyimage=1">
<?php
}

function runInitLogoutProcess()
{
  // check if wordpress action is set to logout and clear cookie
  if (isset($_GET)) {
        if (isset($_GET['action'])) {
            if ($_GET['action'] == 'logout') {
                setcookie('woai', '', time() - 3600, COOKIEPATH, COOKIE_DOMAIN, false);
               setcookie('woak', '', time() - 3600, COOKIEPATH, COOKIE_DOMAIN, false);
            }
        }

  // check if your wp_logout hook is called and do the same.
      if (isset($_GET['loadwordpressbyimage'])) {
            if ($_GET['loadwordpressbyimage'] == 1) {
                setcookie('woak', '', time() - 3600, COOKIEPATH, COOKIE_DOMAIN, false);
               setcookie('woai', '', time() - 3600, COOKIEPATH, COOKIE_DOMAIN, false);
            }
        }


} 

//C'est tout.

0
De Paragon