Utiliser des variables de session dans WordPress

Par défaut, WordPress n'utilise pas les variables de session. Pourquoi ? Parce que dans sa version initiale, il n'en a tout simplement pas besoin.

Si, par contre, vous devez utiliser les variables de session dans votre thème ou dans votre extension, il est possible de le faire puisque, après tout, WordPress n'est rien d'autre qu'un programme PHP.

Il vous faut donc appeler la fonction session_start() avant toute instruction qui renvoie du code au navigateur. Mais quel est le meilleur endroit pour effectuer une telle opération ?

▼Publicité

Fichier wp-config.php

Il serait tentant de l'ajouter directement dans le fichier wp-config.php. Ceci n'est pas une bonne idée parce que :

  • Si vous hébergez votre site sur un serveur sur lequel la configuration register_globals est à On, vos sessions seront automatiquement désactivées par le code du fichier load.php.
  • Si vous avez besoin des variables de session pour une extension ou un thème que vous comptez distribuer, vous n'aurez pas accès au fichier wp-config.php de vos clients.

Nous éviterons donc d'utiliser wp-config.php pour appeler session_start().

Utilisation d'un « hook »

La meilleure alternative consiste à utiliser un « hook » WordPress pour lancer le session_start() après que le code de load.php ait été exécuté et avant que votre code n'ait besoin d'utiliser les variables de session. Le « hook » init est tout à fait  approprié pour cela.

On placera ce « hook » dans le functions.php si on développe un thème ou dans la classe de l'extension si on développe une extension.

Pour éviter que deux extensions lancent le session_start(), on vérifiera s'il a déjà été lancé à l'aide de if ( ! session_id() ).

Ex :

WordPress (PHP)

/**

 * Active les variables de session.

 *

 * Utilisation : add_action( 'init', 'monprefixe_session_start', 1 );

 *

 * @author Christiane Lagacé

 *

 */

function monprefixe_session_start() {

   if ( ! session_id() ) {

      @session_start();

   }

}

 

add_action( 'init', 'monprefixe_session_start', 1 );

ou, si les variables de session doivent être utilisées dans la classe d'une extension

WordPress (PHP)

/**

 * Active les variables de session.

 *

 * Utilisation : add_action( 'init', 'session_start', 1 );

 *

 * @author Christiane Lagacé

 *

 */ 

function session_start() {

   if ( ! session_id() ) {

      @session_start();

   }

}

 

add_action( 'init', array( $this, 'session_start', 1 ) );

Dans ce code, remarquez que la méthode add_action() reçoit la valeur 1 comme troisième paramètre. Ceci fera en sorte que ce « hook » sera exécuté avant les autres initialisations. 

Détruire la session

Lorsque l'usager quitte un site WordPress, la session demeure active. Ceci pourrait être le comportement désiré. Par contre, si ce n'est pas le cas, vous pouvez demander à détruire toutes les variables de session (attention aux effets sur les autres extensions) ou encore une variable de session en particulier (approche moins intrusive).

Vous pouvez utiliser le « hooks » wp_logout afin que la variable de session soit détruite lorsque l'usager se déconnecte de WordPress :

PHP

/**

 * Détruit toutes les variables de session.

 *

 * Utilisation : add_action( 'wp_logout', 'monprefixe_detruire_toutes_variables_session' );

 *

 * @author Christiane Lagacé

 *

 */  

function monprefixe_detruire_toutes_variables_session() {

   if ( isset( $_COOKIE[session_name()] ) ) {

      session_unset();   // détruit les variables de session 

      session_destroy();

   }

}

 

add_action( 'wp_logout', 'monprefixe_detruire_toutes_variables_session' );

ou, pour une approche moins intrusive (donc plus respectueuse du code des autres extensions):

PHP

/**

 * Détruit ma variables de session.

 *

 * Utilisation : add_action( 'wp_logout', 'monprefixe_detruire_ma_variable_session' );

 *

 * @author Christiane Lagacé

 *

 */  

function monprefixe_detruire_ma_variable_session() {

   if ( isset( $_SESSION['mavariable'] ) ) {

      unset( $_SESSION['mavariable'] );

   }

}

 

add_action( 'wp_logout', 'monprefixe_detruire_ma_variable_session' );

Pour plus d'information

« Using the PHP Session in WordPress ». Devondev http://devondev.com/2012/02/03/using-the-php-session-in-wordpress/

« Utilisation de la session dans wordpress ». Web Astuces. http://www.web-astuces.net/wordpress-utilisation-de-la-session-dans-wordpress-362.html

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories