IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème avec setcookie


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 22
    Points : 18
    Points
    18
    Par défaut Problème avec setcookie
    Bonjour à tous,

    J'ai un problème avec setcookie (apparemment) :

    J'utilise un cookie pour enregistrer la langue d'utilisation sur mon site (anglais ou français), en fonction de ça je charge des pages php qui sont différentes.

    Mon code (lang.php) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
    //on vérifie si une langue est affectée dans le cookie 'lang' si oui on affecte la valueur de la langue à la variable 'lang'
    if(isset($_COOKIE['lang'])) {$lang = $_COOKIE['lang'];}
    else {// si aucune langue n'est déclarée on tente de reconnaitre la langue par défaut du navigateur
    	 $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);$lang=fr;}
    //si lang existe
    if (isset($_GET['lang'])){
    //si l'on a choisi la langue en français  on affecte 'fr' à la variable 'lang'
    if ($_GET['lang']=='fr') {$lang='fr';}
    //sinon si l'on a choisi la langue en anglais on affecte 'en' à la variable 'lang'
    else if ($_GET['lang']=='en') {$lang='en';}
    }
    // si la langue est 'fr' (français) on inclut le fichier fr-lang.php 
    if ($lang=='fr') {include('lang/fr-lang.php');}
    // sinon si la langue est 'en' (anglais) on inclut le fichier en-lang.php
    elseif ($lang=='en') {include('lang/en-lang.php');}
    // si aucune langue n'est déclarée on inclut le fichier fr-lang.php par défaut
    //else {include('lang/fr-lang.php');} 
    //définition de la durée du cookie (1 an)
    $expire = 365*24*3600;
    //enregistrement du cookie au nom de lang  
    setcookie("lang", $lang, time() + $expire);
    ?>
    Voici mon erreur :

    Warning: Cannot modify header information - headers already sent by (output started at /homez.116/ecoledecf/www/partners.php:2) in /homez.116/ecoledecf/www/lang.php on line 25

    Erreur que je n'ai d'ailleurs pas en local avec wampserver 2.0

    J'ai vraiment essayé tout ce que je savais et je n'ai plus d'idée.
    MERCI

  2. #2
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    Écrire dans un cookie doit se faire avant d'afficher le moindre texte sur ta page.

    Avant un setcookie il ne doit pas y avoir de texte html écrit que ce soit avec un echo ou du texte en dehors des balises <?php ?>
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  3. #3
    Membre actif Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 263
    Points
    263
    Par défaut
    Je pense sans en être sûr à 100% que l'erreur se déclanche à cause des inclusions que tu fais. Es-tu sûr que tu ne redemandes pas de session/cookie dans les pages que tu inclus? Et que dans celles-ci, il n'y a pas d'autres inclusions?

    Enfin, je remarque que tu mets le "setcookie" après les inclusions, donc après du code html (Je suppose que tes pages php contiennent des balises html), ce qui n'est pas recommandé en général. Je pense qu'aucun code html ne dois figurer avant les setcookie/session_start.
    J'ai déjà rencontré un problème similaire, où tout fonctionnait en local, mais pas sur mon hébergeur.

    Voilà, j'espère bien avoir cerné le problème et t'avoir aidé :-)

    @+
    ZORRO
    Plus Vengeur que Masqué

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    MERCI beaucoup !

    Problème résolu en mettant le setcookie avant les includes.

    Merci pour votre réactivité !

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 201
    Points : 143
    Points
    143
    Par défaut
    Pourquoi vouloir toujours imposer des cookies ? Pourquoi ne pas utiliser une session PHP, voire même un paramètre en url ?

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Bonjour, je me permets de poster à la suite afin de ne pas recréer un topic inutilement puisque celui là porte précisément sur mon problème, bien qu'il ne réponds pas à mon cas précis =(

    Voilà ça fait 3 bonnes heures que je tourne en rond au sujet de la gestion de cookies auto-générés par la fonction setcookie afin de permettre aux utilisateurs de mon site de rester connecté même après avoir fermé le navigateur. (jusque là tout va bien...quoique...)

    Le fait est que juste après avoir utilisé cette fonction (dans une page vierge de html), les cookies apparaissent comme étants présents quand je les interroge via $_COOKIE['mavariable'], mais quand je redirige l'utilisateur sur cete meme page via la page index de mon site, en interrogeant la même variable il apparait qu'elle n'existe plus...

    Pourquoi... T_T

    Sachant que j'ai fais quelques test précédement et que tout marchait bien avant que je couple les cookies aux sessions afin d'automatiser la tâche...

    Voici les script (un peu nettoyés pour être lisibles):

    Le formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <?php
    if(!isset($_SESSION['numero'])){ 
    ?>
    <form name="" action="pages/traitlogin.php" method="post" />
    	<table>
      		<tr>
        		  <td >E-mail:</td>
                      <td><input class="text" type="text" name="login" /> </td>
    		</tr>
                    <tr>
    		  <td >Mot de passe :  </td>
        		  <td><input class="text" type="password" name="password" /></td>
                     </tr>    	
    		<tr>
    		  <td></td>
    		  <td colspan="1"align="center">Se souvenir de moi <input type="checkbox" name="souvenir" value="1"/></td>
    		</tr>
    	</table>
    </form>
    <?php } ?>
    Le traitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
    session_start();
      require_once "config.php";
      if(sizeof($_POST)>0){
     
             // 
            //verifications d'usage sur les champs
           //
     
    if (isset($_POST['souvenir']) &&  isset($_SESSION['numero']))
    	{
    	$expire = time() + 365*24*3600;
    	setcookie('numero', $_SESSION['numero'], $expire); 
    	setcookie('genre', $_SESSION['genre'], $expire); 
    	setcookie('nom', $_SESSION['nom'], $expire);
     
    	echo $_COOKIE['numero'];
    	echo $_COOKIE['genre'];
    	echo $_COOKIE['nom'];
     
    	echo '<a href="../accueil.php">redirection accueil</a>';
    	} 
       }?>

    Au dessus de la balise <html> de mon header.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    session_start();	
     
    echo $_SESSION['numero'].' - '.$_COOKIE['numero'];
    	include('config.php');
    	if (isset ($_COOKIE['numero']) && !isset ($_SESSION['numero']))
    		{
    			$_SESSION['numero'] = $_COOKIE['numero'];
    			$_SESSION['genre'] = $_COOKIE['genre'];
    			$_SESSION['nom'] = $_COOKIE['nom'];
    		}
     
    ?>
    Ici la variable $_COOKIE['numero'] ne s'affiche pas... et si quelqu'un pouvait me dire pourquoi ca m'arrangerais T_T

    Je précise que j'ai pas mal cherché, que j'ai essayé d'eviter tous les pièges liés aux headers, que mon ami google m'a fait sauté plusieurs erreur, mais que j'ai fini par sécher à ce niveau...

    Voilà merci d'avance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Cookies] un problème avec setcookie
    Par ikan87 dans le forum Langage
    Réponses: 3
    Dernier message: 31/05/2007, 15h32
  2. [Sécurité] Problèmes avec setcookie
    Par cach dans le forum Langage
    Réponses: 6
    Dernier message: 01/03/2006, 18h15
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo