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 :

[Cookies] session avec authentification chez free


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Points : 19
    Points
    19
    Par défaut [Cookies] session avec authentification chez free
    Bonjour,
    j'ai donc une erreur avec le fichier de vérification de l'authentification. Je me suis inspiré de l'exemple donnée dans le livre PHP 5 Avancé, je présice que mon hébergeur est free et que j'ai bien un dossiers sessions à la racine de mon dossier de stockage. Je laisse un également l'erreur que je reçois: "
    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/117/sdb/7/2/goyav2002/verif.php:1) in /mnt/117/sdb/7/2/goyav2002/verif.php on line 3

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/117/sdb/7/2/goyav2002/verif.php:1) in /mnt/117/sdb/7/2/goyav2002/verif.php on line 3
    connexion au serveur impossible".
    Le deuxième problème c'est la connexion à la base de donnée qui fonctionne avec la page index du site, mais pas sur celle là.
    Merci de votre aide.


    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
    <?php
    // Initialisation de la session
    session_start();
     
    require_once('vision_db.php');
     
    function verification ($nom, $pass)
    {
    	$connexion=mysql_connect($host, $user, $password)
    	or die ("connexion au serveur impossible");
    	$db=mysql_select_db($database, $connexion)
    	or die ("selection de la base de donnée impossible");
     
    	// Création de la requête SQL
    	$nom_sql = $dbh->quote($nom);
    	$pass_sql = $dbh->quote($pass);
    	$sql = "SELECT count (*) as nbres FROM user WHERE login = $nom_sql AND pass = $pass_sql";
     
    	// Exécution de la requête SQL
    	$result = mysql_fetch_assoc($sql);
    	$row = $result['nbres'];
    	$result = null;
    	if($row['nbres'] == 1)
    	{
    		return TRUE;
    	}
    	else
    	{
    		return FALSE;
    	}
    }
      0  0

  2. #2
    Membre actif Avatar de chtipitou
    Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 175
    Points : 214
    Points
    214
    Par défaut
    regarde si tu n'as pas un espace ou un retour de ligne avant to <?php
      0  0

  3. #3
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Voir la :
    1er problème : http://php.developpez.com/faq/index....s_already_sent

    2ème problème : http://php.developpez.com/faq/?page=...depuisfonction
    tes variables $host, $user, $password ne sont pas définies dans ta fonction verification.
      0  0

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    J'ai toujours le même problème avec les sessions et la fonction pour vérifier le login et mot de pass. Après lecture de la FAQ je ne crois pas avoir l'une de ces erreurs dans le code. Je remet le code ainsi que les messages d'erreure. Merci.


    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/117/sdb/7/2/goyav2002/verif.php:1) in /mnt/117/sdb/7/2/goyav2002/verif.php on line 3

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/117/sdb/7/2/goyav2002/verif.php:1) in /mnt/117/sdb/7/2/goyav2002/verif.php on line 3

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/117/sdb/7/2/goyav2002/verif.php on line 23
    $message

    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
    <?php
    // Initialisation de la session
    session_start();
     
     
     
    function verification ($nom, $pass)
    {
    	require_once('vision_db.php');
    	$connexion=mysql_connect($host, $user, $password)
    	or die ("connexion au serveur impossible");
    	$db=mysql_select_db($database, $connexion)
    	or die ("selection de la base de donnée impossible");
     
    	// Création de la requête SQL
    	$nom_sql = $nom;
    	$pass_sql = $pass;
    	$sql = "SELECT count(*) as nbres FROM user WHERE login = $nom_sql AND password = $pass_sql";
     
    	// Exécution de la requête SQL
    	$result = mysql_query($sql);
    	$row = mysql_fetch_array($result);
    	$result = null;
    	if($row['nbres'] == 1)
    	{
    		return TRUE;
    	}
    	else
    	{
    		return FALSE;
    	}
    }
    // Si on a reçu les données du formulaire:
    if ( isset($_POST['pseudo']) && isset($_POST['motdepasse']) )
    {
    	// On les récupère
    	$nom = $_POST['pseudo'];
    	$motdepasse = $_POST['motdepasse'];
    	// On teste si le mot de passe est valide:
     
    	if (verification($nom, $motdepass) )
    	{
    	// Le mot de passe est valide, l'utilisateur est identifié
    	// On change d'identifiant de session
    	session_regenerate_id();
     
    	// On sauvegarde donc son nom dans la session
    	$_SESSION['nom'] = $nom;
    	$message = 'vous êtes correctement identifié';
    	}
     
    	else
    	{
    	// Sinon on avertit l'utilisateur:
    	$message = 'Mauvais mot de passe';
    	$message .= '<a href = "auth.php">retouor</a>';
    	}
    }
    else
    {
    	// Un des champs n'est pas rempli
    	$message = 'le login ou le mot de passest vide';
    	$message .= '<a href = "auth.php">retouor</a>';
    } 
    ?>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Identification</title>
    </head>
     
    <body>
    <?php echo '$message'; ?>
    </body>
    </html>
      0  0

  5. #5
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Pour les "headers already sent...", tu dois avoir un caractère avant <?php à la première ligne. Pour le supprimer, tu peux ouvrir ton fichier avec un éditeur de texte digne de ce nom (ou un éditeur hexadécimal), ou d'une autre façon simplement copier / coller ton code dans un autre fichier texte, vide.

    Pour ton erreur avec la fonction de vérification, ce n'est pas la même qu'avant, puisque tu as déplacé l'include de 'vision_db.php'... Maintenant, ton problème viens de la requête sql : il faut entourer tes chaînes de caractères de quotes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT count(*) as nbres FROM user WHERE login = '$nom_sql' AND password = '$pass_sql'";
    Et au passage ton code n'est pas sécurisé contre les injection SQL... Penses à vérifier ce que tu reçois, et à échapper tes chaînes avec mysql_real_escape_strings().
      0  0

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Désolé la question peux paraître stupide mais comment retourner mes chaines de caractères de quote, à l'origine le code était:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $nom_sql=$dbh->quote($nom);
    $pass_sql=$dbh->quote($pass);
    mais PDO pour MySQL n'est pas installé sur les serveurs de Free, c'est donc ces deux instruction que je n'arrive pas à remplacer. Et j'utilise dreamweaver pour taper mon code (même en faisant un copier coller dans un éditeur de text, textEdit sur mac), je vois pas d'espace avant <?php .
    Merci.
      0  0

  7. #7
    Expert éminent
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Points : 9 031
    Points
    9 031
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mysql_real_escape_string($nom_sql);
    mysql_real_escape_string($pass_sql);
      0  0

  8. #8
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Points : 234
    Points
    234
    Par défaut
    Le problème pour les warning sur session_start() vient tout simplement que lorsque tu héberge ton site chez free tu dois créer un répertoire que tu dois nomer "sessions" sinon tu ne peux utiliser les sessions php

    Voila
      0  0

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    J'ai déjà créé un dossier nomé "sessions" à la racine de mon répertoire, pour le second problème c'est réglé. Par contre je ne vois vraiment pas d'ou viens cette erreur avec la session.

    Petite parenthèse au sujet de la sécurité, que penser vous du livre PHP 5 Sécurité?

    Merci.
      0  0

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Points : 19
    Points
    19
    Par défaut nouveaux problème
    Bonjour, les problème précédants sont résolus. Maintenant le script pour vérifier si le couple mot de passe login est valide me renvois sytématiquement "false", peu import que j'ai remplis ou non les champs d'authentification.
    Je rajoute quelques indications, les champs de la table user sont "ID" "login" et "password". Je rajoute également le code de la page d'authenfication:
    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Identification admin</title>
    </head>
     
    <body>
    <div id=head>
    En tête
    </div>
    <div id=main>
    	<form method = "post" action = "verif.php">
    	<p>
        	<label for = "nom">Pseudo : </label>
            <input type="text" name = "pseudo" />
        </p>
        <p>
        	<label for="motdepasse">Mot de passe : </label>
            <input type="password" name="motdepasse" />
        </p>
        <p>
        	<input type="submit" value="s'iddentifier" />
        </p>
        </form>
    </div>
     
     
    </body>
    </html>
    et celui de la page verif
    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
    <?php
    // Initialisation de la session
    session_start();
     
    require_once('vision_db.php');
    $connexion=mysql_connect($host, $user, $password)
    or die ("connexion au serveur impossible");
    $db=mysql_select_db($database, $connexion)
    or die ("selection de la base de donnee impossible");
     
    function verification($nom, $pass)
    {
     
     
    	// Creation de la requete SQL
    	mysql_real_escape_string($nom_sql);
    	mysql_real_escape_string($pass_sql);
    	$sql = "SELECT count(*) as nbres FROM user WHERE login = '$nom_sql' AND password = '$pass_sql'";
     
    	// Execution de la requete SQL
    	$result = mysql_query($sql);
    	$row = mysql_fetch_assoc($result);
    	$result = null;
    	if($row['nbres'] == 1)
    	{
    		return TRUE;
    	}
    	else
    	{
    		return FALSE;
    	}
    }
     
    // Si on a reeu les donnees du formulaire:
    if ( isset($_POST['pseudo']) && isset($_POST['motdepasse']) )
    {
    	// On les recupere
    	$nom = $_POST['pseudo'];
    	$motdepasse = $_POST['motdepasse'];
    	// On teste si le mot de passe est valide:
     
    	if (verification($nom, $motdepass) )
    	{
    	// Le mot de passe est valide, l'utilisateur est identifie
    	// On change d'identifiant de session
    	session_regenerate_id();
     
    	// On sauvegarde donc son nom dans la session
    	$_SESSION['nom'] = $nom;
    	$message = 'vous etes correctement identifie';
    	}
     
    	else
    	{
    	// Sinon on avertit l'utilisateur:
    	$message = 'Mauvais mot de passe';
    	$message .= '<a href = "auth.php"> retour</a>';
    	}
    }
    else
    {
    	// Un des champs n'est pas rempli
    	$message = 'le login ou le mot de passest vide';
    	$message .= '<a href = "auth.php">retouor</a>';
    } 
    ?>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Identification</title>
    </head>
     
    <body>
    <?php echo $message; ?>
    </body>
    </html>
    Merci.
      0  0

  11. #11
    Membre actif Avatar de chtipitou
    Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 175
    Points : 214
    Points
    214
    Par défaut
    tu utilises mal mysql_real_escape_string et tu ne lui passais pas les bon parametres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	$nom_sql = mysql_real_escape_string($nom);
    	$pass_sql = mysql_real_escape_string($pass);
      0  0

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Le problème persiste toujours, malgré cette précision.
      0  0

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Merci pour votre aide, après relecture du code j'ai retrouvé quelques fautes d'inattention et le reste je me suis débrouillé.
      0  0

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Nouveau petit problème, cette fois c'est pour conserver la session. Après une authentification réussie je souhaiterais après vérification du couple login/mot de pass, rediriger l'utilisateur vers une autre page (que je réalise avec un header), mais là j'ai un message d'erreur.
    Le script servant à vérifier si l'utilisateur c'est déjà authentifié ou pas (secure.php):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    session_start();
    // On vérifie si l'utilisateur est identifié
    if (!isset($_SESSION['nom']))
    {
    	// La variable de sesion n'existe pas, donc l'utilisateur n'est pas authentifié.
    	// On redirige sur la page permettant de s'authentifié
    	header('location: auth.php');
    	// ON arret l'éxécution
    	exit();
    }
    ?>
    et là le code de la page d'errivée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    include('secure.php');
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Admin Vision</title>
    </head>
    <body>
    bonjour!
    </body>
    </html>
    et enfin le message d'erreur:
    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/117/sdb/7/2/goyav2002/admin.php:1) in /mnt/117/sdb/7/2/goyav2002/secure.php on line 2


    Ce qui me parait bizzard c'est que j'ai vérifié si je n'avais d'espace avant <?php, mais il n'y a rien.
    Merci.
      0  0

  15. #15
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 36
    Points : 38
    Points
    38
    Par défaut
    Le problème est le meme qu'avant mais dans l'autre sens!

    tes headers sont deja envoyé au client lors du session_start(), lis bien ton bouquin et la FAQ tout ca est ecrit dedans


    Avoir déjà écrit dans la page Warning: Cannot send session cookie - headers already sent by (output started at /home/SiteWeb/SiteAnalyse/index.php:3) in /home/SiteWeb/SiteAnalyse/index.php on line 6
    Cette erreur survient lorsqu'on tente d'ouvrir une session après avoir déjà écrit dans le document, ce qui interdit, bien sûr.

    Tentative d'envoi d'en-têtes Warning: Cannot add header information - headers already sent by (output started at /home/SiteWeb/SiteAnalyse/index.php:3) in /home/SiteWeb/SiteAnalyse/index.php on line 25
    Cette erreur survient lorsqu'on tente d'envoyer des en-têtes grâce à la fonction header() après avoir écrit dans la page.

    On ne peut pas commencer une session après que le serveur ait envoyé au client les en-têtes HTTP/1.0 (ou supérieures) de la page.

    Ainsi, la commande session_start() doit impérativement être exécutée avant tout envoi par le serveur d'en-têtes HTTP au navigateur.

    L'identifiant de session étant envoyé sous forme de cookie au client, ce dernier doit être envoyé avant que la page ne s'affiche car l'affichage force l'envoi d'en-têtes.

    Tout contenu texte placé avant session_start() (même un saut de ligne) provoque un affichage et donc l'envoi d'en-têtes qui doivent précéder le contenu de la page.

    change de methode pour rediriger, tu peux toujours utiliser le javascript ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script language="text/javascript">
         window.location="ta_page.php";
    </script>
    ca devrait le faire
      0  0

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Merci, tout fonctionne maintenant.
      0  0

Discussion fermée
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 25/08/2009, 11h07
  2. Réponses: 2
    Dernier message: 18/06/2008, 10h10
  3. Cree sa radio avec pageperso chez free
    Par Soultrain dans le forum Free
    Réponses: 5
    Dernier message: 07/09/2007, 18h09
  4. [Cookies] sessions avec le navigateur AOL
    Par tenere3 dans le forum Langage
    Réponses: 4
    Dernier message: 09/06/2007, 08h46
  5. créer un dossier avec php chez free
    Par stars333 dans le forum Langage
    Réponses: 1
    Dernier message: 04/05/2007, 19h25

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