Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/08/2011, 11h43   #1
Membre à l'essai
 
Développeur informatique
Inscription : mai 2008
Messages : 100
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mai 2008
Messages : 100
Points : 23
Points : 23
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 :
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 :
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 :
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
Grulf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 11h56   #2
Modérateur
 
Avatar de Vil'Coyote
 
Développeur Web
Inscription : février 2008
Messages : 3 303
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : février 2008
Messages : 3 303
Points : 4 481
Points : 4 481
é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.
Vil'Coyote est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 12h55   #3
Membre à l'essai
 
Développeur informatique
Inscription : mai 2008
Messages : 100
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mai 2008
Messages : 100
Points : 23
Points : 23
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 :
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 :
echo '<script language="javascript" type="text/javascript">window.location.replace("http://tas2bd.free.fr/index.php");</script>';
Idem avec require_once :
Code :
require_once('http://tas2bd.free.fr/index.php');
Une autre idée de redirection qui ne transmettrai pas le header peut-être ?
__________________
GRULF
Grulf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 13h24   #4
Modérateur
 
Avatar de Vil'Coyote
 
Développeur Web
Inscription : février 2008
Messages : 3 303
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : février 2008
Messages : 3 303
Points : 4 481
Points : 4 481
utilise la fonction header("location:url/de/ta/page") en php cela sera plus propre
de plus lorsque tu charges ta page index :
Code :
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.
}
Vil'Coyote est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 13h52   #5
Membre à l'essai
 
Développeur informatique
Inscription : mai 2008
Messages : 100
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mai 2008
Messages : 100
Points : 23
Points : 23
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 :
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 :
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
Grulf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 14h13   #6
Membre à l'essai
 
Développeur informatique
Inscription : mai 2008
Messages : 100
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mai 2008
Messages : 100
Points : 23
Points : 23
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
Grulf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 16h27   #7
Membre habitué
 
Homme Lucas GAUTHERON
Lycéen
Inscription : décembre 2008
Messages : 106
Détails du profil
Informations personnelles :
Nom : Homme Lucas GAUTHERON

Informations professionnelles :
Activité : Lycéen

Informations forums :
Inscription : décembre 2008
Messages : 106
Points : 145
Points : 145
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
lucas74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h09.


 
 
 
 
Partenaires

Hébergement Web