Précédent   Forum du club des développeurs et IT Pro > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/11/2012, 15h20   #1
oceane751
Membre éprouvé
 
Avatar de oceane751
 
Intégrateur Web
Inscription : novembre 2004
Messages : 1 077
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 077
Points : 465
Points : 465
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 :
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 :
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 :
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 :
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
__________________
oceane751 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 20h20   #2
RunCodePhp
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 965
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 965
Points : 3 671
Points : 3 671
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]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 17h48.


 
 
 
 
Partenaires

Hébergement Web