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 02/08/2011, 14h38   #1
Membre à l'essai
 
Homme
Développeur Web
Inscription : mai 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2011
Messages : 85
Points : 21
Points : 21
Par défaut Session utilisateur PHP

Bonjour à tous, voici mon problème :

Je possède une page de connexion à mon site (index.php).
Lorsque l'utilisateur se connecte, il arrive sur ma page d'accueil. Cependant, je n'arrive pas à gérer le fait qu'il soit connecté pour les autres pages de mon site. Voici comment je procède :

J'ai un script qui me permet de vérifier que l'utilisateur est bien connecté :

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
<?php
/*--------------------------
Vérification de la connexion
--------------------------*/
if(!isset($_SESSION['sessionOuverte']) || !$_SESSION['sessionOuverte']){
	if(isset($_POST['login']) && isset($_POST['password']) && !empty($_POST['login']) && !empty($_POST['password'])){
		$verif = $bdd->query('SELECT mail FROM user WHERE mail = \''. addslashes($_POST['login']) .'\' AND mdp = \''. addslashes(md5($_POST['password'])) .'\'');
		$i= 0;
		while ($donnees = $verif->fetch()){
			$i++;
		}
		$verif->closeCursor();
 
		if($i < 1){
			header('location: index.php?erreur='. $i .'');
		}
		else{
			$_SESSION['sessionOuverte']= true;
		}
	}
	else{
		header('location: index.php?erreur=1');
	}
}
?>
Donc si son login et son mot de passe son bons à la tentative de connexion, une variable de session $_SESSION['sessionOuverte'] est créée avec pour valeur "true". Si ceux ci ne sont pas bons, la variable de session est détruite (redirection vers la page index.php qui passe la variable de session à null à tous les coups).
Et j'appelle ce script au début de chacune de mes pages. Donc si l'utilisateur s'est correctement loggé, il devrait pouvoir accéder à chaque page sans être redirigé vers la page d'accueil avec un message d'erreur non?
Et bien là ce n'est pas le cas, à chaque tentative d'accès à une nouvelle page, ça rentre dans la condition de mon script :

Code :
if(!isset($_SESSION['sessionOuverte']) || !$_SESSION['sessionOuverte']){}
Et ensuite vu que les login et mot de passe de la page index.php ne sont pas présents et bien il est redirigé..

Je ne vois vraiment pas où je déconne.. Si quelqu'un peut me permettre d'ouvrir les yeux .. ^^'
Merci beaucoup d'avance!

EDIT: Je précise que session_start(); est présent au début de chacune de mes pages.
yeste64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 14h59   #2
Membre éprouvé
 
Homme Gaetan
Webmaster
Inscription : janvier 2007
Messages : 386
Détails du profil
Informations personnelles :
Nom : Homme Gaetan
Âge : 40
Localisation : France

Informations professionnelles :
Activité : Webmaster
Secteur : Biens de consommation

Informations forums :
Inscription : janvier 2007
Messages : 386
Points : 441
Points : 441
Envoyer un message via MSN à Gaetan_
Bonjour,

Pourquoi tes variables sont elles en $_POST ?
Elles ne sont postées qu'une seule fois pour vérifier si ton couple login / password existe, après selon ton script c'est via une session ou un cookie mais plus en $_POST.

Code :
if(isset($_POST['login']) && isset($_POST['password']) && !empty($_POST['login']) && !empty($_POST['password'])){
Gaetan_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 15h10   #3
Membre à l'essai
 
Homme
Développeur Web
Inscription : mai 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2011
Messages : 85
Points : 21
Points : 21
Et bien si cette condition est exécutée c'est que l'utilisateur vient du formulaire de connexion (car la condition précédente permet de savoir si la variable de session existe et donc que l'utilisateur s'est déjà connecté). Donc logiquement, le test de ces variables $_POST ne doit se faire que la première fois, lorsque l'utilisateur essaie de se connecter pour la première fois. Dans les autres pages, il ne devrait pas s'effectuer puisque la variable de session $_SESSION['sessionOuverte'] est censée exister. Le script sert donc de sécurité au cas où quelqu'un déciderait d'accéder à une page sans ne s'être jamais connecté.

J'espère réussir à me faire comprendre ^^'
yeste64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 15h27   #4
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Bonjour,
le code que tu a donné ne vaut que pour la page index.php ! (-> traitement du formulaire d'identification)

Pour les autres pages :

_protec_page.php
Code :
1
2
3
4
5
6
7
8
<?php // protection page
if(!isset($_SESSION['sessionOuverte']) || $_SESSION['sessionOuverte']!=true) {
	// redirection vers identification (index.php ?)
	header('location : index.php');
	exit;
}
// sinon : c'est bon, il est connecté, on continue ...
?>
et dans les pages à protéger (tout au début) :
Code :
1
2
3
<?php session_start();
 // protection page
require('_protec_page.php'); ?>
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 15h36   #5
Membre à l'essai
 
Homme
Développeur Web
Inscription : mai 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2011
Messages : 85
Points : 21
Points : 21
Merci de vos réponses.


jreaux62 ce que tu me proposes correspond exactement à ce que je fais. Malgré tout, j'ai essayé comme tu m'as dit, mais ça ne marche toujours pas.

Ah, je viens de supprimer le $_SESSION['sessionOuverte']= null; au début de la page index.php et maintenant ça marche.. Comment cela se fait-il..?

Et ne faut-il pas supprimer la variable de session si l'utilisateur revient sur la page de connexion? Car si on ne le fait pas et qu'il décide de se reconnecter, même s'il entre des identifiants incorrects, la variable de session étant existante, il arrivera à accéder au site.
yeste64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 16h15   #6
Membre à l'essai
 
Homme
Développeur Web
Inscription : mai 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2011
Messages : 85
Points : 21
Points : 21
Bon j'ai "résolu" le problème en passant un paramètre lorsque l'utilisateur clique sur le bouton de déconnnexion du site, ainsi, l'annulation de la variable de session ne s'effectue que si ce paramètre est présent :

index.php

Code :
1
2
3
if(isset($_GET['deconnexion']) && $_GET['deconnexion']==true){
	$_SESSION['sessionOuverte']= null;
}
Mais je ne comprends toujours pas pourquoi le fait de mettre cette ligne sans condition (
Code :
$_SESSION['sessionOuverte']= null;
) dans la page index.php efface aussi la variable de session dans les autres pages. Si quelqu'un trouve la réponse... Car je considère ma méthode comme une "solution temporaire" (en effet, si l'utilisateur accède à la page de connexion autrement que par le bouton de déconnexion, il va rester connecté même en entrant de mauvais identifiants, ce n'est donc pas très bon..)
yeste64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 16h27   #7
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Tu es sûr de bien comprendre ce que tu dis ??

C'est juste une question de LOGIQUE :

1/ l'utilisateur arrive sur la page index (identification)
-> SI PAS "identifié" -> on affiche le formulaire d'identification
...-> formulaire rempli : on vérifie les login et mpd
......-> SI login et mdp OK : on valide "identifié" (on affiche "bonjour!" ou on redirige vers une page "mon profil" par exemple)
-> SI DEJA "identifié" -> pas besoin du formulaire ! (on affiche "bonjour!" ou on redirige vers une page "mon profil" par exemple)

2/ sur une page protégée
-> SI PAS "identifié" -> on redirige vers la page index (identification)
-> SI DEJA "identifié" -> on affiche la page ...

3/ "déconnexion"
-> on supprime "identifié"
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 16h34   #8
Membre à l'essai
 
Homme
Développeur Web
Inscription : mai 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2011
Messages : 85
Points : 21
Points : 21
Désolé, je me suis mal exprimé :

La variable de session est passé à "null" au début de la page index.php. Une fois que l'utilisateur essaie de se connecter à partir de cette page, le traitement se fait sur la page accueil.php contenant mon script de vérification. La variable de session est donc créée après la page index.php. C'est pour cela que le fait de mettre $_SESSION['sessionOuverte']=null; dans index.php ne devrait LOGIQUEMENT pas affecter ma variable qui se créé APRES. Cette ligne sert juste à supprimer la variable si l'utilisateur décide de revenir sur l'écran de connexion un moment APRES s'être connecté.
yeste64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 16h37   #9
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Citation:
Envoyé par yeste64 Voir le message
La variable de session est passé à "null" au début de la page index.php.
Ca ne sert à rien !
en plus : soit elle est "true", soit elle est "false", mais pas "null" !

Et pourquoi veux-tu qu'un utilisateur DEJA connecté ait envie de se RE-connecter ???
même s'il retourne sur la page index, c'est à toi (au programme) de le rediriger !
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 16h41   #10
Membre à l'essai
 
Homme
Développeur Web
Inscription : mai 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2011
Messages : 85
Points : 21
Points : 21
null supprime l'existence d'une variable.

Bon, je sens que tu me prends de haut, mais je te remercie quand même de ton aide.
Voici le résultat final :

index.php :

Code :
1
2
3
4
5
6
7
8
if(isset($_SESSION['sessionOuverte']) && $_SESSION['sessionOuverte']==true){
	if(isset($_GET['deconnexion']) && $_GET['deconnexion']==true){
		$_SESSION['sessionOuverte']= null;
	}
	else{
		header('location: accueil.php');
	}
}
Toutes mes autres pages :

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
<?php
/*--------------------------
Vérification de la connexion
--------------------------*/
if(!isset($_SESSION['sessionOuverte']) || $_SESSION['sessionOuverte']!=true) {
	if(isset($_POST['login']) && isset($_POST['password']) && !empty($_POST['login']) && !empty($_POST['password'])){
		$verif = $bdd->query('SELECT mail FROM user WHERE mail = \''. addslashes($_POST['login']) .'\' AND mdp = \''. addslashes(md5($_POST['password'])) .'\'');
		$i= 0;
		while ($donnees = $verif->fetch()){
			$i++;
		}
		$verif->closeCursor();
 
		if($i < 1){
			header('location: index.php?erreur=1');
		}
		else{
			$_SESSION['sessionOuverte']= true;
		}
	}
	else{
		header('location: index.php?erreur=1');
	}
}
?>
L'utilisateur n'a donc plus la possibilité de revenir sur l'écran de connexion autrement qu'en cliquant sur le bouton de déconnexion sur le site ou bien en fermant son navigateur au préalable.

Merci quand même, l'amabilité et l'humilité, ce sera pour une autre fois!

A bientôt
yeste64 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 02/08/2011, 19h40   #11
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Citation:
Celui qui dit "moi, je sais !" est plus ignorant que l'ignorant ; il faut toujours savoir apprendre des autres.
Ostad Elahi, Musicien et philosophe iranien
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 02/08/2011, 21h18   #12
Membre à l'essai
 
Homme
Développeur Web
Inscription : mai 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2011
Messages : 85
Points : 21
Points : 21
Citation:
Bon, je sens que tu me prends de haut, mais je te remercie quand même de ton aide.
Je te reprochais seulement la manière dont tu me répondais, et pas du tout le contenu de tes réponses. Tu m'as d'ailleurs permis de résoudre mon problème, c'est simplement la manière dont tu l'as fait qui m'a moyennement plu.

Sur ce, à bientôt.
yeste64 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 02/08/2011, 21h30   #13
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
C'est vrai, j'abuse parfois des "!!" ou des "???" ...

Ca permet juste d'"animer" le discours !

Un peu comme un méditerranéen qui parle "en faisant des grands gestes" ...

Pas de quoi se fâcher, ok ?
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 02/08/2011, 22h05   #14
Membre à l'essai
 
Homme
Développeur Web
Inscription : mai 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2011
Messages : 85
Points : 21
Points : 21
Je suis basque, alors disons que j'ai le sang chaud aussi ok? lol A bientôt l'ami !
yeste64 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 03/08/2011, 09h52   #15
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Citation:
Envoyé par yeste64 Voir le message
Je suis basque, ...
Tout s'explique !
J'avais un bon copain à ... Urrugne : "Jérome du Sud" ! (moi, c'était "Jérome du Nord" !!)
On s'était connu (aussi !) sur ce forum (je l'avais aidé à programmer son site ...)
On est ... "un peu fâché" depuis ...
Aucun des deux n'a voulu perdre au "concours des grandes gueules" !
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 10h02   #16
Membre à l'essai
 
Homme
Développeur Web
Inscription : mai 2011
Messages : 85
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2011
Messages : 85
Points : 21
Points : 21
Mdr t'en fais pas chuis pas une grande gueule, loin de là. J'ai juste le sang chaud
yeste64 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 10h20.


 
 
 
 
Partenaires

Hébergement Web