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 :

perte de session et rechargement de page


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Points : 575
    Points
    575
    Par défaut perte de session et rechargement de page
    Bonjour à tous,

    Quand je recharge ma page ou quand je change de page, je perds ma session.

    1) je me logue via un formulaire.
    2) grâce à l'AJAX, je vérifie que le pseudo et le mot de passe et bon.
    3) si tout est ok, redirection vers ma page principale (main.php)

    mes différents code :

    connexion.html

    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
     
    <!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>Untitled Document</title>
    <link type="text/css" rel="stylesheet" href="/projet/css.css" />
    <SCRIPT LANGUAGE="Javascript" SRC="js/js.js"> </SCRIPT>
    <SCRIPT LANGUAGE="Javascript" SRC="js/connexion.js"> </SCRIPT>
    </head>
     
    <body>
     
    <div id="tout">
    <div id="banniere"><img src="images/ban_coeur.jpg" /></div>
    	<div id="int">
            <div id="gauche"><div id="date"></div>
            	<a href="connexion.html">CONNEXION</a> 
            	<a href="inscription.html">S'INSCRIRE</a>
            </div>
            <div id="droit">Pour vO_ous connecter, veuillez remplir les champs suivants<br />
            	<form method = "post" action="connexion.php" name="connexion" onsubmit="putain(); return false;">
                	<div id="mauvais"></div>
                	Votre pseudo<input type="text" name="pseudo"/><br />
                    Votre mot de passe<input type="password" name="mdp"/><br />
                    <input type="submit" />
                </form>
     
            </div>
        </div>
    </div>
     
    </body>
    </html>
    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
    16
    17
    18
    19
    20
    21
    22
     
     
    <?php
    session_start();
     header('Content-Type: text/html; charset=UTF-8');
    mysql_connect("sql.free.fr", "cc", "vv", "cc")
    or die("Impossible de se connecter : " . mysql_error());
    mysql_select_db("cc") or die("erreur de connexion a la base de donnees");
    $requete = "SELECT COUNT(*) AS nbr, id_users FROM users WHERE pseudo = '".$_POST['pseudo']."' AND mdp = '".$_POST['mdp']."'";
    $quer = mysql_query($requete) or die("requete non envoyée");
    $res = mysql_fetch_assoc($quer) or die("requete non reçue");
    if($res[nbr] == 1){
    	echo "ok"; 
    	$insert = "UPDATE users SET connexion='oui' WHERE id_users = '".$res['id_users']."'";
    	mysql_query($insert);
    	$_SESSION['pseudo'] = $_POST['pseudo'];
     
    }
    else { 
    	echo "non";
    }
    ?>
    code ajax (connexion.js) :

    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
     
     
     
    function putain()
    {
     
     
     
        if(window.XMLHttpRequest){
        // Pour tous les navigateurs
            req = new XMLHttpRequest();
        }
        else{
        if(window.ActiveXObject){
          // Pour IE
              req = new ActiveXObject("Microsoft.XMLHTTP");
        }
        }
     
    	pseudo=  document.connexion.pseudo.value;
     
     
    	mdp = document.connexion.mdp.value;
     
     
    	content_mdp = document.getElementById("mauvais");
     
    	req.open("POST","connexion.php", "true");
     
    	req.onreadystatechange = function()
      	{
     
          if (req.readyState == 4 && req.status==200)
          { 
     
    		if(req.responseText  == "non") {
    			content_mdp.innerHTML ="mauvais identifiants";
     
    			return false;
     
    		}
     
    		if(req.responseText  == "ok") {
    			document.location.href="main.php";
    		}
     
     
    	 }
     
    	}
    	 req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
      	req.send('pseudo='+pseudo+'&mdp='+mdp);
     
    }
    main.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
     
    <?php session_start(); ?>
    <!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>Untitled Document</title>
    <link type="text/css" rel="stylesheet" href="/projet/css.css" />
    <SCRIPT LANGUAGE="Javascript" SRC="js/js.js"> </SCRIPT>
    <SCRIPT LANGUAGE="Javascript" SRC="js/les_connectes.js"> </SCRIPT>
    </head>
    <body>
    <div id="tout">
    <div id="banniere"><img src="images/ban_coeur.jpg" /></div>
    	<div id="int">
            <div id="gauche"><div id="date"></div>
     
            <?php if ($_SESSION['pseudo']){
             	echo "Bienvenue ". $_SESSION['pseudo']."<br>";
    			echo " <a href='deconnection.php'>DECONNECTION</a>";
    			}
    		else {
    		?>
     
            	<a href="connexion.html">CONNEXION</a>
            <? } ?>
            	<a href="inscription.html">S'INSCRIRE</a><br />
                <a href="preschezvous.php&pseudo=<?php echo $_SESSION['pseudo']; ?>">Les personnes près de chez vous ! </a>
     
                 <br /><div style="color:#003399";>Les connectés</div> <div id="connectes"></div>
            </div>
            <div id="droit">TEST 2</div>
        </div>
    </div>
     
    </body>
    </html>
    Dans mon main.php, je vois bien le pseudo, après connexion.
    Et donc, quand je recharge ma page ou que j'en change, ma session a disparu.

    Quelqu'un pourrait il m'aider?

    Merci

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    En 1er tu devrais éviter de créer des pages comme connexion.html mais plutôt créer essentiellement des pages avec l'extension .php

    Aussi, au lieu d'utiliser comme nom et comme terme "connexion", il serait mieux d'utiliser "identification", c'est plus en phase avec la réalité.
    C'est pour ma part un abus de langage d'appeler ça connexion car cette notion n'y est pas.

    Du coup en utilisant ce terme connexion cela peu donner l'impression qu'il y a une connexion entre le serveur du site et le poste client (alors qu'il en est rien), et faire du code en dépit du bon sens.


    Mise à part cette petite parenthèse, vérifie du coté de ton navigateur le ou les cookie concernant ton domaine et les divers paramètres.
    Si une même session n'est pas conservée lors de la navigation, cela être lié à un des paramètres qui ne serait pas correcte, comme le chemin, le domaine (cookie.path, cokkie.domaine).
    Si rien n'est configuré à ce niveau, il est peut être nécessaire de le faire.
    Regarde du coté du php.ini (et de la doc de Php) les divers paramètres liés aux cookies/cookie de session.

    Par ailleurs, le fond du problème peut être lié au fait que la session soit à l'origine créée via de l'Ajax (donc en partie par du JS), et l'Ajax c'est particulier.

    Regarde du coté de la config session.cookie_httponly, par défaut elle vaut théoriquement FALSE.
    Fait un essai en la configurant à TRUE, juste pour voir.


    Puis pour vérifier plus simplement si la même session est conservée, il suffit d'afficher l'Identifiant de session avec session_id().
    Place le dans main.php par exemple.

    Tout les reste ne sert à rien pour tester comment réagit la session.
    Tout ton code dans le connexion par exemple ne sert à rien (pour tester j'entends), un simple session_start() théoriquement suffit (mise à part rajouter les divers config coté cookie/session qui seraient peut être nécessaire).
    Ce n'est que lorsque toute cette étape fonctionne comme prévu où là on peu commencer à rajouter toutes sorte de sur-couche de code plus ou liés aux sessions.


    NB : Attention aux sauts de lignes (même un espace) avant les session_start(), il ne doit surtout pas en avoir, ça peut créer ce genre de problème.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

Discussions similaires

  1. perte de session entre 2 pages suivant le domaine
    Par letitou dans le forum Langage
    Réponses: 3
    Dernier message: 19/06/2007, 10h31
  2. Perte de session total entre page
    Par Okinou dans le forum Langage
    Réponses: 6
    Dernier message: 19/02/2007, 10h08
  3. Rechargement de page et variables de session
    Par lecra dans le forum Langage
    Réponses: 17
    Dernier message: 02/10/2006, 10h07
  4. Perte de session à chaque page, chaque refresh
    Par tio dans le forum Langage
    Réponses: 8
    Dernier message: 22/03/2006, 13h01
  5. Perte de Session d'une page à l'autre
    Par Flam dans le forum Langage
    Réponses: 3
    Dernier message: 15/03/2006, 14h34

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