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);
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
(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.