Sessions php

Résolu
Bonjour,

J'ai un problème avec des sessions : ce ne sont pas vraiment des sessions. elles marchent une seule fois et après, dès que je clique sur un lien, la session est détruite.

Tout se passe sur la page index. Et voici le code (simplifié) :

<?php 
	include ('header.php');

	// J'ouvre une session sir le mot de passe et le login ont été saisis :
	if ($_POST['login'] != "" && $_POST['login'] != "") {
		session_start();
		
		$_SESSION['login'] = $_POST['login'];
		$_SESSION['password'] = $_POST['password'];
	}

	// Je teste ma session :
	if (isset($_SESSION['login']) && isset($_SESSION['password'])) {
		// conneexion à la base de données
		require ('connect.php');
		
		// requête :
		$reponse = mysql_query ("SELECT * FROM bdd WHERE login = '".$_SESSION['login']."' AND password = '".$_SESSION['password']."'");
		
		// Si l'utilisateur existe :
		if ($donnees = mysql_fetch_array($reponse)) {
			echo "C'est bon !";
		}
		// Sinon :
		else {
			// Ici j'ai mon formulaire de connexion
		}
		
		// Déconnexion de la base de données.
		require ('deconnect.php');
	}
?> 
Configuration: Windows Vista
Firefox 3.5.1

47 réponses

Résumé de la discussion

Problème rencontré : des sessions PHP ne se pérennisent pas, la connexion se perd après chaque navigation et la vérification des identifiants est faite sur la page index. Des éléments suggèrent de déplacer session_start() hors d'un test conditionnel afin que la session soit démarrée sur chaque page nécessitant $_SESSION, et non uniquement après la saisie du formulaire. Certains avertissent aussi que la configuration peut bloquer les cookies ou les sessions côté serveur, et recommandent des vérifications comme l'activation des cookies ou l'usage de .htaccess pour session.auto_start. En outre, certaines propositions évoquent d'assurer la cohérence de la logique entre pages et de vérifier que les résultats de connexion restent accessibles après les redirections ou les appels vers d'autres scripts.

Bobot (l’IA à votre service)
  1. M'en voudras-tu après ceci ? Mais j'ai enfin trouvé la solution la où je n'ai jamais songé chercher.

    J'ai juste déplacé mon dossier admin et je l'ai rapproché de la racine...

    Avant : http://www.mauvais-artistes.com/ad/admin/

    Maintenant : http://www.mauvais-artistes.com/admin/
    1. J'avais bien regardé ton code, sauf là ou il fallait...

      http://www.mauvais-artistes.com/test/test.php

      Ca marche !
      1. Contributeur
        ben il m affiche bien la 1ere page, mais apres.. comme y a une réécriture de l adresse j ai erreur 404

        pourquoi tu as http://www.mauvais-artistes.com/test/ et non http://www.mauvais-artistes.com/test.php ?

        Car apres, comme je fait un post test.php dans le form et dans le header.. ca marche plus !!
        1. Désolé pour le retard...

          http://www.mauvais-artistes.com/test/ toujours rien visiblement. Et j'ai pas touché à ton code...
          1. Contributeur
            ok, on reprend...

            on va fgaire un test..

            crée un fichier test.php et met ca dedans :

            <?php
            session_start();
            $Html="";
            $Html.='<FORM Method="POST" Action="test.php">';
            if (isset($_GET['Deconnect'])){session_destroy();
            header('location: test.php');
            }
            if (!isset($_POST['login']) && !isset($_SESSION['login']) ){
            if (isset($_GET['Erreur'])){$Html.= "Erreur login/mdp<br>";}
            $Html.="

            login : <INPUT type='text' size=20 name='login'><BR>
            psw : <INPUT type='text' size=20 name='password'><BR>
            <INPUT type='submit' value='Envoyer'>";

            }else{
            if (!isset($_SESSION['login']) ){
            if ($_POST['login']=="monnom" && $_POST['password'] =="monpsw") {

            $_SESSION['login'] = $_POST['login'];
            $_SESSION['password'] = $_POST['password'];

            $Html.="Bienvenue ".$_SESSION['login']."<br>";
            $Html.="<a href=test.php?Deconnect=1>ici</a> pour deconnecter<br>";
            $Html.="<a href=test.php>ici</a> pour acceder au site";
            }else{
            header('location: test.php?Erreur=1');
            }
            }else{
            $Html.=" Ici le code de ma page quand l'utilisateur est logué<br>";
            $Html.="<a href=test.php?Deconnect=1>ici</a> pour deconnecter";
            }
            }
            $Html.='</FORM>';

            echo $Html;
            ?>

            met le en local et sur ton site et teste le...

            login:monnom password : monpsw

            je te l'ai mis aussi en ligne ici : http://jjsteing.ifrance.com/test.php
            1. Non, le rep logs est d'origine, l'autre je l'ai créé mais ça ne change rien...

              Désolé d'insister, ça devient interminable. Merci pour ton aide.
              1. Oui maintenant, les deux sont créés...

                J'avais un répertoire logs d'origine qui n'est pas vide... et maintenant un répertoire sessions.
                1. Contributeur
                  tu les à créer sur ton site 1and1.. et alors, ca marche ?
              2. J'ai appellé 1and1 pour voir si ça ne venait pas d'eux, c'est un bon début. Mais le mec m'a dit sans me l'assurer, que ca pouvait venir des cookies, d'où la différence entre la version en ligne et la version locale.

                Le js au passage ne sert à rien dans le répertoire admin. J'ai oublié de l'enlever...
                1. Je comprends pas trop.

                  Tu veux que je créer un répertoire SessionS avec un 's', commun pour tout mon site et tous mes répertoires ?

                  Je ne saisis pas trop pour être honnête.
                  1. Contributeur
                    non, juste 1 seul.. dans le repertoire racine.. nommé session (sans majuscule).. moi je suis chez free.. et mes sessions ne tenaient pas... et donc, j'ai créer ce repertoire.. et toutes les sessions des utilisateur qui sont connecté se cré la dedans.. je n ai rien d'autre eu à faire que de créer ce repertoire.. il se débrouille pour le reste apparement..
                  2. @jjsteingMarche pas, mais il y a déjà un dossier logs sur la racine...
                2. Contributeur
                  Par contre.. maintenant que tu le dis.. j'ais revérifier sur mon site.. bon, je confirme.. j'ai rien dans mes cookies concernant les sessions.. mais je me rappele que j'avais du créer un repertoire sessions (oublie pas le 's' sur la racine ;).. c'est ptetre ca :).. enfin, j'espere ;)
                  1. Contributeur
                    cookies?? ben j vois pas le rapport...

                    par contre, t'as un bug dans ton js :

                    Error: document.getElementById("chenove") is null
                    Source File: http://www.mauvais-artistes.com/ad/admin/script.js
                    Line: 2
                    1. J'ai trouvé des infos sur les cookies, mais je ne sais pas trop dans quel sens utiliser tout ça ?

                      - Quand dois-je créer le cookie et comment pour utiliser avec une session ?
                      - Comment exploiter ensuite ce cookie ?
                      1. On m'a dit que c'est un problème de cookie.

                        En local, ça se fait tout seul, en pas local, faut enregistrer le cookie... !

                        Mais j'y connais rien aux cookies, à part aux petits gâteaux. Je cherche et si je trouve, je reviens très vite...
                        1. Oui, je te file l'adresse en MP même si je pense que c'est assez simple à pirater... lol, alors je te fais confiance...
                          1. Contributeur
                            qu'est ce que tu entend par :sur la même racine ? sur ton site 1and1 ?
                            1. Mais ca marche en local mais pas sur mon serveur...

                              En plus je viens de regarder, j'avais déjà utilisé les sessions et les header sur la même racine mais dans un autre dossier et ça fonctionne...
                              1. Oui j'ai changé header ('location: connexion.php'); par un include, parce que ça ne fonctionne pas en ligne.

                                mais j'ai une page qui ne fait que rediriger vers une autre, avec un header location :

                                <?php
                                     header ('location: http://www.google.fr');
                                ?>
                                


                                et ça m'affiche une page blanche !
                                • 1
                                • 2
                                • 3