Comment utiliser session start dans Wordpress?

je crée un site bilingue et j'ai décidé d'utiliser session_start pour déterminer la langue de la page en utilisant le code suivant:

session_start();    
if(!isset($_SESSION['language'])){
    $_SESSION['language'] = 'English'; //default language
}

Le problème, c'est que c'est en contradiction avec Wordpress et j'ai le code suivant:

Warning: session_start() [function.session-start]: ne peut pas envoyer session les en - têtes de cookies déjà envoyés par / home/neurosur/public_html/v2/wp-content/themes/default / header.php: 8) dans / home/neurosur/public_html/v2/wp-content/themes/default / region.php sur la ligne 13

Est-il un moyen de contourner ce problème?

17
demandé sur Rob 2012-08-03 18:07:09

3 réponses

déplacez votre code vers le haut de l'en-tête.fichier php. Et de vérifier si la session existe déjà:

if(session_id() == '')
     session_start(); 

your code here...
15
répondu kpotehin 2012-08-03 14:10:44

EDIT

Wordpress envoie des informations d'en-tête avant l'en-tête.le fichier php est lancé. Donc démarrer la session dans l'en-tête.php peut encore entrer en conflit avec les informations d'en-tête que wordpress envoie. L'exécutant sur init évite ce problème. (à Partir de jammypeach commentaire)

Écrire le code suivant dans vos fonctions.fichier php:

function register_my_session()
{
  if( !session_id() )
  {
    session_start();
  }
}

add_action('init', 'register_my_session');

maintenant, si vous voulez définir des données en session, faites comme ceci

$_SESSION['username'] = 'rafi';
37
répondu rafi 2017-09-22 17:00:34

j'ai trouvé un article intéressant par Peter ici. Je suis en utilisant le code suivant dans mon functions.php:

add_action('init', 'myStartSession', 1);
add_action('wp_logout', 'myEndSession');
add_action('wp_login', 'myEndSession');

function myStartSession() {
    if(!session_id()) {
        session_start();
    }
}

function myEndSession() {
    session_destroy ();
}

cela détruit l'ancienne session lorsque l'utilisateur se déconnecte alors de nouveau avec un compte différent.

11
répondu j.c 2017-05-19 16:56:59