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 de session non gardées


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Points : 57
    Points
    57
    Par défaut Problème de session non gardées
    Bonjour,
    J'utilise un système de sessions pour l'identification sur un site web, mais je perds mes infos de session. Je vous mets le code :

    connexion.php (1ère page d'identification)
    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
    <form method="post" action="login.php">
    	<table>
    		<tr>
    			<td>Identifiant</td><td><input type="text" name="id" id="id" /></td>
    		</tr>
    		<tr>
    			<td>Password</td><td><input type="password" name="password" id="password" /></td>
    		</tr>
    		<tr>
    			<td colspan="2" align="right">
    				<input type="submit" value="Connexion" />
    			</td>
    		</tr>
    	</table>
    </form>
    login.php (2ème page qui crée la session)
    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
    <?php
     
    	@session_start();
     
    	$id = $_REQUEST["id"];
    	$password = $_REQUEST["password"];
     
    	require_once("connexion_bdd.php");
     
    	$req_identification = mysql_query("SELECT * FROM BD_USER WHERE ID = '".$id."' AND PASSWORD = '".$password."'");
    	if (mysql_num_rows($req_identification) == 0) {
    		$_SESSION['pk_user'] = '';
    		$_SESSION['id_user'] = '';
    		echo "<head><meta http-equiv='refresh' content='3;url=http://xxxxxx/connexion.php' /></head>";
    		echo "Identifiant ou mot de passe incorrect !";
    	} elseif (mysql_num_rows($req_identification) > 1) {
    		$_SESSION['pk_user'] = '';
    		$_SESSION['id_user'] = '';
    		echo "<head><meta http-equiv='refresh' content='3;url=http://xxxxxx/connexion.php' /></head>";
    		echo "Plus d'un utilisateur correspond à votre identifiant, merci de contacter l'administrateur !";
    	} else {
    		while($res_identification=mysql_fetch_array($req_identification)) {
    			$pk_user = $res_identification["PK_USER"];
    			$id_user = $res_identification["ID"];
    		}
    		$_SESSION['pk_user'] = $pk_user;
    		$_SESSION['id_user'] = $id_user;
    		echo "<head><meta http-equiv='refresh' content='3;url=http://xxxxxx/index.php' /></head>";
    		echo "<div align='center'>Bienvenue ".$_SESSION['id_user']." !</div>";
    	}
     
    ?>
    Jusque là, tout va bien, il m'affiche bien "Bienvenue Machin !" et me redirige vers la page d'accueil :

    index.php (page d'accueil qui vérifie que le user est OK => Sinon retour à la page de connexion)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
     
    	@session_start();
    	if (empty($_SESSION['pk_user']) || empty($_SESSION['id_user'])) {
    		echo '<script language="javascript" type="text/javascript">window.alert("Session perdue !'.$_SESSION['id_user'].$_SESSION['pk_user'].'");window.location.replace("http://xxxxxx/connexion.php");</script>';
    	}
     
    	require_once('header.php');
    [...]
     
    ?>
    Mais là il m'affiche la pop-up "Session perdue !" et retour à la page de connexion. Il n'a plus les variables de ma session...

    Indice : Si je vire le @ devant session_start(), il me dit "Cannot send session cookie - headers already sent by ..."

    Merci de votre (future) aide
    GRULF

  2. #2
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Points : 7 503
    Points
    7 503
    Par défaut
    évite le @ devant les action.
    maintenant est tu sur d'avoir mis ton session_start tout au début de ta page car en générale le headers already send laisse supposer que ta page à déjà commencé à charger des données. d'ou le fait que tes varaibles de sessions soient vide.
    la vie n'est pas cirrhose des foies ...

    Avant de poster un message Rechercher n'est pas qu'une option.
    FAQ Web - Tuto Web

  3. #3
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Points : 57
    Points
    57
    Par défaut
    Le début de ma page index.php est strictement ce que j'ai écrit au-dessus, et il commence bien directement par le session_start();

    Par contre je viens de percuter un truc. Ma redirection vers ma page index.php est faite comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<head><meta http-equiv='refresh' content='3;url=http://xxxxxx/index.php' /></head>";
    C'est p'tet là que le header est envoyé et bloque mon session_start() ?
    J'ai essayé une redirection en JS mais j'ai la même chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<script language="javascript" type="text/javascript">window.location.replace("http://tas2bd.free.fr/index.php");</script>';
    Idem avec require_once :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once('http://tas2bd.free.fr/index.php');
    Une autre idée de redirection qui ne transmettrai pas le header peut-être ?
    GRULF

  4. #4
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Points : 7 503
    Points
    7 503
    Par défaut
    utilise la fonction header("location:url/de/ta/page") en php cela sera plus propre
    de plus lorsque tu charges ta page index :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    @session_start();
     
    if (empty($_SESSION['pk_user']) || empty($_SESSION['id_user'])) 
    {
       header("location:../xxxxxx/connexion.php")
    }
    else
    {
    	require_once('header.php');
            .....................................
            le reste de ton code si tout ce passe bien.
    }
    la vie n'est pas cirrhose des foies ...

    Avant de poster un message Rechercher n'est pas qu'une option.
    FAQ Web - Tuto Web

  5. #5
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Points : 57
    Points
    57
    Par défaut
    Vil'Coyote => OK, j'ai intégré mon code dans le else.
    Pour le header(), ça ne marche pas non plus, mais le souci doit être ailleurs en fait.

    Je viens de voir que mon session_start() de ma 2ème page login.php ne passe pas non plus ( headers already sent ).

    J'ai testé avec juste ça...

    connexion.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
    <form method="post" action="login.php">
    	<table>
    		<tr>
    			<td>Identifiant</td><td><input type="text" name="id" id="id" /></td>
    		</tr>
    		<tr>
    			<td>Password</td><td><input type="password" name="password" id="password" /></td>
    		</tr>
    		<tr>
    			<td colspan="2" align="right">
    				<input type="submit" value="Connexion" />
    			</td>
    		</tr>
    	</table>
    </form>
    login.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
     
    	session_start();
     
    ?>
    ... et ça ne marche pas non plus ( headers already sent ).
    Là vous avez L'INTEGRALITE du code des 2 pages.

    J'ai bien un dossier "sessions" à la racine de mon serveur (Free), et quand je clique sur "Connexion" il me crée un fichier de session vide dans ce répertoire.
    GRULF

  6. #6
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Points : 57
    Points
    57
    Par défaut
    Bon j'ai fini par trouvé !!!
    Une histoire d'encodage... Mes fichiers étaient encodés en UTF-8. J'ai tout réencodé en ANSI et ça marche !


    Merci de votre aide, je vais remettre le reste de mes redirections avec des header().
    GRULF

  7. #7
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2008
    Messages : 106
    Points : 152
    Points
    152
    Par défaut
    Citation Envoyé par Grulf Voir le message
    Bon j'ai fini par trouvé !!!
    Une histoire d'encodage... Mes fichiers étaient encodés en UTF-8. J'ai tout réencodé en ANSI et ça marche !


    Merci de votre aide, je vais remettre le reste de mes redirections avec des header().
    tu peux tout simplement laisser en UTF8 mais sans BOM

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

Discussions similaires

  1. [Servlets - JSP] Problème de session
    Par the java lover dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 28/11/2011, 10h54
  2. Problème de session non créée
    Par triaguae dans le forum Langage
    Réponses: 6
    Dernier message: 11/03/2011, 22h22
  3. probleme session non gardée
    Par cotede2 dans le forum Langage
    Réponses: 2
    Dernier message: 21/10/2009, 08h58
  4. Variable session non retenue / problème sur Firefox
    Par hatembr dans le forum Langage
    Réponses: 10
    Dernier message: 25/04/2007, 18h22
  5. [Accents - XML] Problème de codage non supporté !!
    Par Smortex dans le forum Composants VCL
    Réponses: 6
    Dernier message: 24/11/2002, 12h00

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