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 :

Probleme de cookies


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 9
    Points
    9
    Par défaut Probleme de cookies
    Bonjours à tous.

    Débutant en php : j'utilisaissur mon site un systeme d'identification par session.
    J'ai voulus ajouter une fonction "mémoriser mon mot de passe" en utilisant les cookies.

    Cependant , lorsque je coche cette case (donc le serveur essaye de créer le cookie) sur ma page de login j'obtiens l'erreur suivante :

    Warning: Cannot modify header information - headers already sent by (output started at /home/host/playz.kappatau.fr/public_html/include/header.php:19) in /home/host/playz.kappatau.fr/public_html/login.php on line 79

    Warning: Cannot modify header information - headers already sent by (output started at /home/host/playz.kappatau.fr/public_html/include/header.php:19) in /home/host/playz.kappatau.fr/public_html/login.php on line 80
    Si je comprend bien : il me signale qu'un en tête est déja envoyé par la page header.php à la ligne 19 ? Je n'ai rien trouvé d'anormal ... (je met le code à la fin de mon post).

    J'utilise sur chaque page de mon site une méthode d'include qui inclus toutes les pages nécessaires (barre de navigation, scripts, etc...).

    Dans cette partie d'inclusion : j'ai ajouter une page "checkcookies" qui vérifie si un cookie existe et, le cas échéant, créé la session de connexion utilisateur.

    Voici mes codes :

    include.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
    <?php 
    include('include/server.php');
    //CONNEXION SERVEUR
     
    include('include/checkcookies.php');
    //SCRIPT VERIFICATION COOKIES
     
     
    include('include/header.php');
    //BARRE NAVIGATION SUPERIEURE
     
    include('include/loading.php');
    //BARRE DE CHARGEMENT
     
    include('include/script.php');
    //SCRIPTS
     ?>
     <link rel="icon" type="image/png" href="image/favicon.png" />
    <!--FAVICON -->
     
    <LINK rel="stylesheet" type="text/css" href="include/theme.css">
    <!-- PARAMETRES GRAPHIQUES -->
    login.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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    <?php include('include.php')?>
    <meta http-equiv="Content-Type" content="text/html;" />
    <meta charset="utf-8"/>
    <LINK rel="stylesheet" type="text/css" href="css/login.css">
    <title>Connexion - Playz</title>
    </head>
    <center> 
    <?php
    //Si lutilisateur est connecte, on le deconecte
    if(isset($_SESSION['login']))
    {
            //On le deconecte en supprimant simplement les sessions username et userid
            unset($_SESSION['login'], $_SESSION['userid']);
     
    		if (isset($_COOKIE['mail'], $_COOKIE['pswd']))
    {
    			setcookie('mail', '', time()-100);
    	setcookie('pswd', '', time()-100);
    }
    ?>
    <title>Déconnexion - Playz</title>
     
    <div id="logoutmessage" class="windowdefault">
    Déconnexion...
    </div>
    <script>
    window.setTimeout("location=('/');",2000)
    </script>
     
     
    <?php
    }
    else
    {?>
     
    <div id="loginpagetable" class="windowdefault">
     
    <form action="login.php" method='post'>
    Adresse mail d'inscription :<br>
    <input type="text" name="email" maxlength="250"><br>
    Mot de passe :<br>
     <input type="password"name="password" maxlength="10"><br>
     Conserver la connexion :<input type="checkbox" name="memorize" id="memorize" value="1" />
    <input type="submit" value="Connexion" class="button" style="width:50%;"><br>
     
    </form></center>
    </div>
     
    <?php
            //On verifie si le formulaire a ete envoye
            if(isset($_POST['email'], $_POST['password']))
            {
                    //On echappe les variables pour pouvoir les mettre dans des requetes SQL
                    if(get_magic_quotes_gpc())
                    {
                            $email = mysql_real_escape_string(stripslashes($_POST['email']));
                            $password = stripslashes(md5($_POST['password']));
                    }
                    else
                    {
                            $email = mysql_real_escape_string($_POST['email']);
                            $password = $_POST['password'];
                    }
                    //On recupere le mot de passe de lutilisateur
                    $req = mysql_query('select password,id from users where email="'.$email.'"');
                    $dn = mysql_fetch_array($req);
                    //On le compare a celui quil a entre et on verifie si le membre existe
                    if($dn['password']==$password and mysql_num_rows($req)>0)
                    {
                            //Si le mot de passe es bon, on ne vas pas afficher le formulaire
                            //On enregistre son pseudo dans la session username et son identifiant dans la session userid
                            $_SESSION['login'] = $_POST['email'];
                            $_SESSION['userid'] = $dn['id'];
    						$id = $_SESSION['userid'];
     
    						if(isset($_POST['memorize']) and $_POST['memorize']=='1')
    			{
    				$one_year = time()+(60*60*24*365);
    				setcookie('mail', $_POST['email'], $one_year);
    				setcookie('pswd', sha1($password), $one_year);
    			}
    ?>
    <title>Connexion - Playz</title>
    <div id="loginmessage" class="windowdefault">
    Connexion...
    </div>
    <script>
    window.setTimeout("location=('/');",2000)
    </script>
    <script>
      $("document").ready(function () {
    $("#logintable").hide();
        });
    </script>
     
    <?php
                    }
                    else
                    {?>
     <div id="loginpageerror" class="windowdefault">  
     
    <font color="#700000">Combinaison incorrecte</font><br>
    <a href="index.php">Retour a l'accueil</a>
     
    </div>
     
     
                    <?php }
            }
     
     
    ?>
     
    <?php
            }
    ?>
    </center>
    <?php
    include('include/footer.php');
    //BARRE NAVIGATION INFERIEUR
    ?>
    checkcookies.php (/include/checkcookies.php) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php //Cette page permet d'initialiser le site en verifiant par exemple si le membre est connecté
    if(!isset($_SESSION['login']) and isset($_COOKIE['mail'], $_COOKIE['pswd']))
    {
    	$cnn = mysql_query('select password,id from users where email="'.$_COOKIE['mail'].'"');
    	$dn_cnn = mysql_fetch_array($cnn);
    	if(sha1($dn_cnn['password'])==$_COOKIE['pswd'] and mysql_num_rows($cnn)>0)
    	{
    		$_SESSION['login'] = $_COOKIE['mail'];
    		$_SESSION['userid'] = $dn_cnn['id'];
    	}
    }
    ?>
    Et la page header.php d'ou semble venir l'erreur :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <html>
    <LINK rel="stylesheet" type="text/css" href="include/css/header.css">
    </head>	
    <script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script>
    <BODY>
    <!-- DEBUT BARRE -->
    <div id="bar">
     
    <!-- LOGO -->
    <a href="index.php?src=logo">
    <div id="logo">
    <img src="image/logo.png" class="logo">
    </div>
    </a>
     
     
    <!-- SI UTILISATEUR CONNECTE -->
    <?php
    if(isset($_SESSION['login']))
    {
    $dbar = mysql_query('select * from users where id = '. intval($_SESSION['userid']));
            $ddbar = mysql_fetch_array($dbar);  ?>
     
    	<div id="userbutton">
     
    	   <img src="<?php echo($ddbar['avatar']); ?>" class="userbutton">
     
    	</div>
     
     
    	<div id="userpanel" class="windowdefault">
     
    	<center>
    		<b><?php echo($ddbar['prenom']); ?> <?php echo($ddbar['nom']); ?></b><br>
    		(<?php echo($ddbar['pseudo']); ?>)
    		<br>
    		<a href="profil?id=<?php echo($ddbar['id']); ?>"><input type="button" value="Mon profil" class="button" style="width:80%;"/></a><br>
    		<a href="edit_profil"><input type="button" value="Modifier mon profil" class="button" style="width:80%;"/></a><br>
    		<a href="login"><input type="button" value="Se déconnecter" class="button" style="width:80%;"/></a>
    	</center>
     
    	</div>
     
    <?php
    }
    else
    {
    //SI UTILISATEUR NON CONNECTE
    ?>
    <div id="login">
     
     <div id="loginbutton">
     
     <center>
     <img src="image/loginbutton.png" class="login">
     </center>
     
     </div>
     
     <div id="loginpanel" class="windowdefault">
     
     <center>
      <b>Connexion</b><br>
    <form action="login.php" method='post'>
    Adresse mail d'inscription :<br>
    <input type="text" name="email" maxlength="250"><br>
    Mot de passe :<br>
     <input type="password"name="password" maxlength="10"><br><br>
     Conserver la connexion :<input type="checkbox" name="memorize" id="memorize" value="1" />
    <input type="submit" value="Connexion" class="button" style="width:80%;"><br>
    </form></center>
     
     </div>
     
    </div>
     
    <?php
    } ?>
     
    <!--SCRIPTS-->
     
    <script>
        $("#loginbutton").click(function () {
          $("#loginpanel").slideToggle("fast");
        });
     
    	    $("#userbutton").click(function () {
          $("#userpanel").slideToggle("fast");
        });
    </script>
    <!-- FIN BARRE -->
    </div>

    Voilà : les cookies sont bien appelés avant tout code html ou autre : je ne comprend pas pourquoi j'ai ce message (uniquement lors d'une connexion en cochant la case, de plus , la session est tout de même créée).

    ... Quelqu'un pourrais-t-il m'apporter son aide ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu ne peux pas faire le setcookie() après avoir déjà envoyé quelque chose.
    Ici tu envoies le contenu de header.html avant le setcookie().

    Également tu as un problème d'organisation de ton HTML : tu as tes balises meta et title qui se ballade dans le body.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    1/ vérifie ton encodage, ça se trouve il y a un caractère dont j'ai oublié le nom qu'on ne voit pas et qui se glisse entre le début du code et le <?php

    2/ ?> est inutile en fin de fichier. D'autant plus que certain éditeur impose un retour à la ligne en fin de fichier ... si c'est après le ?> ça démarre la partie document du protocole http.

    3/ toute ta partie authentification doit être traitée AVANT la moindre balise <html> et le moindre echo. le numéro de ligne n'est pas parlant dans ton cas parce que php est en pause quand tu commences ton document.

    Concretement le code issu de login.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if(isset($_SESSION['login']))
    {
            //On le deconecte en supprimant simplement les sessions username et userid
            unset($_SESSION['login'], $_SESSION['userid']);
     
    		if (isset($_COOKIE['mail'], $_COOKIE['pswd']))
    {
    			setcookie('mail', '', time()-100);
    	setcookie('pswd', '', time()-100);
    }
    devrait être dans checkcookie.php, et oui il faut refaire un test supplémentaire (overhead < Epsilon ) quand on fait l'affichage. Grosso-modo dans une page web normale, il devrait toujours y avoir les étapes suivantes:

    1. traitement de la requete entrante (comprendre les parametres de la retraite pour executer la bonne action sur les bons objets)
    2. execution de la logique métier (controle )
    3. récupération optionnelle des erreurs
    4. affichage


    le 1 doit comprendre notament
    1. vérification de l'identité via la session OU le coockie (le coockie dure plus longtemps mais est souvent désactivé... la session fonctionne aussi sur un coockie est plus compacte dans les entetes (un token),n'est pas falsifiable par un utilisateur malicieux (il peut la voler, c'est tout... un coockie aussi, parce qu'une session c'est un coockie) et tu peux y mettre autant de données que nécessaire sans outrer ton utilisateur).
    2. le traitement de l'url (le routage).
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup : je revois ça.

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

Discussions similaires

  1. Probleme identification cookies
    Par syltrox dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 31/07/2008, 22h10
  2. probleme de cookie
    Par chrissch87 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 14/11/2006, 11h53
  3. [Cookies] probleme gestion cookie de session
    Par cyberyan dans le forum Langage
    Réponses: 1
    Dernier message: 13/11/2006, 10h58
  4. [Cookies] HELP probleme avec cookies
    Par sirbaldur dans le forum Langage
    Réponses: 2
    Dernier message: 14/06/2006, 13h26
  5. [Cookies] problemes avec cookie
    Par mereyj dans le forum Langage
    Réponses: 2
    Dernier message: 29/03/2006, 22h48

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