Précédent   Forum des professionnels en informatique > 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 Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/01/2007, 13h17   #1
Membre à l'essai
 
Étudiant
Inscription : janvier 2007
Messages : 121
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2007
Messages : 121
Points : 24
Points : 24
Par défaut [Cookies] Variables sessions protection par mot de passe

voici mon probléme:

un utilisateur se connecte et si son mot de passe est correct il peut accéder à plusieurs pages sécurisées
les utilisateurs sont dans une base de donnée

j'ai commencé ainsi:

Code :
1
2
3
4
5
6
7
8
9
10
<?php
session_start();
// Connexion à la base
require "bd-mysql.php";
 
//reprise des valeurs insérées dans le text box
$nomentreprise = $_POST["nomentreprise"]
$nomutilisateur = $_POST["nomutilisateur"]
$pass = $_POST["pass"]
?>
mais aprés je suis perdue je ne vois pas comment comparer la saisie avec avec les utilisateurs enregistrés

et au lieu d' ajouter par la suite sur les autres pages

Code :
1
2
3
<?php
session_start();
?>
pour dire que c'est une page sécurisée et qu'il peut y accéder

ne peut on pas préciser dans la page d'identification la liste des pages auxquels l'utilsateur peut accéder avec son mot de passe si il est correct?

derniére question

mis à part ce systéme connaissez vous un autre moyen pour sécuriser un site par mot de passe
merci
luciedoudou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2007, 14h18   #2
Membre actif
 
Inscription : août 2002
Messages : 194
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 194
Points : 194
Points : 194
Envoyer un message via MSN à Léortien
Citation:
Envoyé par luciedoudou
mais aprés je suis perdue je ne vois pas comment comparer la saisie avec avec les utilisateurs enregistrés
je ne connais pas la structure de ta table ou tu as enregistré les mots de passe
mais fait une requete sql en recherchant l'enregistrement avec nomentreprise, nomutilisateur et pass
ensuite tu vérifies que le nombre de ligne renvoyés n'est pas nul (c'est donc que tu as trouvé l'utilisateur). et si c'est nul (utlisateur non trouvé) tu refuses la connexion
bref quelquechose du genre (en fonction de ta table, de ton code etc...)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
$requete = "SELECT * FROM table_avec_pass WHERE nomentreprise = '$nomentreprise' AND  nomutilisateur = '$nomutilisateur' AND pass='$pass' ";
$resultat = mysql_query($requete);
$nbres = mysql_num_rows($resultat);
 
if ( $nbres == 0 ) 
{
    //connexion réfusée
}
else
{
    //connexion acceptée
}

pour ton autre question je ne pourrais pas te répondre avec précision...
Léortien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2007, 14h30   #3
Membre chevronné
 
Avatar de J0r_x
 
Homme
Analyste - Programmeur
Inscription : mai 2006
Messages : 712
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Analyste - Programmeur
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mai 2006
Messages : 712
Points : 607
Points : 607
Au debut de la page tu test :

Code :
1
2
3
4
5
 
<?
$session_start()
if(isset($_session['acces'])&&$_session['acces']=="acces") { }
else { echo 'Accés refusé'; }
Quand quelqu'un se connecte tu lui donne sur $_session['acces'] des droits et aprés tu les test selon les pages.
J0r_x est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 06h35   #4
Membre à l'essai
 
Étudiant
Inscription : janvier 2007
Messages : 121
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2007
Messages : 121
Points : 24
Points : 24
Par défaut probléme

Alors en fait j'ai un probléme

quand je rajoute ces deux lignes de codes plus rien ne s'affiche sur ma page index
Code :
1
2
$nomutilisateur = $_POST["nomutilisateur"]
$pass = $_POST["pass"]
et pour tester mon code j'ai insérer un pseudo et un mot de passe dans la table mais ca ne marche pas non plus


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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
 
<?php
 
	session_start();
	// Connexion à la base
	require "bd-mysql.php";
 
?>
 
 
 
<!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=ISO-8859-1" />
<title>Page d'accueil</title>
<link rel = "stylesheet" type="text/css" href="style.css">
 
</head>
 
<body>
 
 
 
 
 
<div id="zonedesaisie">
 
   <form method="post" action = "index.php">
		 <table>
 
				  <br></br>
 
 
					<tr>
				 <td>Nom utilisateur:</td>
					 <td><input type="username" name="nomutilisateur"></td>
					 </tr>
					 <tr>
				<td> Mot de passe:</td>
					 <td><input type="password" name="pass"></td>
					     </tr>   
 
 
 
				  </tr>
		 </table>
   </form>
</div>
 
	 	                       <!--bouton pour ouvrir une session-->
					<div id="btnouvrirsession"> <td><input type="submit" value="Ouvrir une session"></td></div>
 
 
<?php
 
 
 
//reprise des valeurs insérées dans le text box
 
$nomutilisateur = $_POST["nomutilisateur"]
$pass = $_POST["pass"]
 
//on va dans la table pour voir si l'utilisateur est dans la table
//pseudo et mdp correspondent aux noms des colonnes dans ma table user 
 
 
$requete = "SELECT * FROM user WHERE pseudo = '$nomutilisateur' AND mdp ='$pass' ";
$resultat = mysql_query($requete);
$nbres = mysql_num_rows($resultat);
 
if ( $nbres == 0 ) //on scann la table pour voir si l'utilisateur est présent
{//si non alors
    echo 'connexion refusée';
}
else
{//si oui
 
header("feuilledechoix.php");
 
}
 
 ?>
 
 
			<br></br>
				<br></br>
					<br></br>
 
<br></br>
 
<div align="center">Vous avez des problèmes? Contactez <a href="mailto:stefan.delettre@laposte.net">Stephane Delettre</a>. 
Copyright © 2006-2007 Design System. Tous droits réservés. </div>
 
 
</body>
</html>
luciedoudou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 06h38   #5
Membre à l'essai
 
Étudiant
Inscription : janvier 2007
Messages : 121
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2007
Messages : 121
Points : 24
Points : 24
Par défaut ok pour l'affichage

j'ai trouvé mon probléme pour l'affichage, il manqué bêtement 2 ;
reste plus le probléme qu'avec ma bd
luciedoudou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 07h44   #6
Membre à l'essai
 
Étudiant
Inscription : janvier 2007
Messages : 121
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2007
Messages : 121
Points : 24
Points : 24
Par défaut je cherche

en fait j'ai fait des essais pour voir si chaque lignes de codes fonctionnaient et tout marche il cherche bien dans la base la ligne qui a le mot de passe

par contre j'ai surment un probléme pour la redirection

et j'ai mis dans l'entête de ma deuxiéme page

Code :
1
2
3
4
5
<?
$session_start();
if (isset($_SESSION['acces']) && ($_SESSION['acces']=="acces")) { }
else { echo 'Accés refusé'; }
?>
mais je ne vois pas d'ou sort

$session_start();

et le acces

merci de m'aider
luciedoudou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 08h36   #7
Membre actif
 
Inscription : août 2002
Messages : 194
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 194
Points : 194
Points : 194
Envoyer un message via MSN à Léortien
si je ne me trompe pas
session_start();
crée une session (ou restaure celle trouvée sur le serveur)
(google est ton ami pour des détails très poussés sur le fonctionnement détaillé de cette fonction mieux que je ne saurais te dire)

donc si dans ta page de vérification/login tu as définit une session et que tu y as enregistré des variables
avec le session_start(); sur ta nouvelle page ça va te permettre de récupérer ces valeurs



et le acces comme disait J0r_x dans le cas où la connexion est acceptée tu créés une session (sur la page qui teste si l'utilisateur a bien entré le bon mot de passe)
et tu enregistres en session acces avec les droits que possède l'utilisateur

Code :
1
2
3
//connexion acceptée
session_start();
$_SESSION['acces']="tout";
et à la place du tout, tu mets les droits que tu veux (tout, lecture, etc....) enfin ce qui correspond à la logique de ton site


et dans tes pages à protéger
tu utilises ce qu'il a dit
avec si besoin (si tu as défini plusieurs droits d'accès aux pages)
un nouveau test pour voir si les droits correspondent à la page


et dans le cas ou l'utilisateur n'a pas le droit tu peux le rediriger vers une page qui indique connexion refusée par exemple
Léortien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 10h33   #8
Membre à l'essai
 
Étudiant
Inscription : janvier 2007
Messages : 121
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2007
Messages : 121
Points : 24
Points : 24
Par défaut alors la...

malheuresement je n'ai pas tout compris dans ton message
j'ai donc apporté des changements comme je comprenais

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?php
 
	session_start();
	$_SESSION["acces"] = "acces";
	// Connexion à la base
	require "bd-mysql.php";
 
 
?>
 
<!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=ISO-8859-1" />
<title>Page d'accueil</title>
<link rel = "stylesheet" type="text/css" href="style.css">
 
 
 
</head>
 
<body>
 
 
 
<div id="zonedesaisie">
 
   <form method="post" action = "index.php">
		 <table>
 
				  <br></br>
 
 
					<tr>
				 <td>Nom utilisateur:</td>
					 <td><input type="username" name="nomutilisateur"></td>
					 </tr>
					 <tr>
				<td> Mot de passe:</td>
					 <td><input type="password" name="pass"></td>
					     </tr>   
 
 
 
				  </tr>
		 </table>
   </form>
</div>
 
	 	                       <!--bouton pour ouvrir une session-->
					<div id="btnouvrirsession"> <td><input type="submit" value="Ouvrir une session"></td></div>
 
 
<?php
 
 
 
//reprise des valeurs insérées dans le text box
 
$nomutilisateur = $_POST["nomutilisateur"];
$pass = $_POST["pass"];
 
//on va dans la table pour voir si l'utilisateur est dans la table
//pseudo et mdp correspondent aux noms des colonnes dans ma table user 
// 
 
$requete = "SELECT * FROM user WHERE pseudo = '$nomutilisateur' AND mdp ='$pass'";
$resultat = mysql_query($requete);
$nbres = mysql_num_rows($resultat);
 
//la requête est bien exécutée puisqu'elle affiche un c'est à dire que une ligne comporte cet utilisateur
 
 
 
if ( $nbres == 0 ) //on scann la table pour voir si l'utilisateur est présent
{//si non alors
    echo 'connexion refusée';
}
else
 
{//si oui
 
header("location:feuilledechoix.php");
 
 
}
 
 
 
 
 ?>
 
 
			<br></br>
				<br></br>
					<br></br>
 
<br></br>
 
 
 
 
</body>
</html>
j'ai modifié le session en haut

et dans ma deuxiéme page au tout début je n'ai mis que

Code :
1
2
3
4
5
6
<?
 
 session_start();
 
 
?>
merci
luciedoudou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 10h59   #9
Membre chevronné
 
Avatar de J0r_x
 
Homme
Analyste - Programmeur
Inscription : mai 2006
Messages : 712
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Analyste - Programmeur
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mai 2006
Messages : 712
Points : 607
Points : 607
le $_SESSION['acces'] tu lui donne une valeur en fonction de l'utilisateur.

Si c'est un admin $_SESSION['acces'] = "admin"
Si c'est un moderateur $_SESSION['acces'] = "modo"
Si c'est un utilisateur $_SESSION['acces'] = "util"

Aprés en debut de page tu test avec if.
exemple page only admin :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
if (isset($_SESSION['acces'])&&$_SESSION['acces']=="admin") {
 
ton code .....
 
}
else {
 
echo 'cette partie du site est reservé aux admins':
 
}
Tu fais ca sur chaque page et tu es tranquil, ton site est "protégé" n'oublie pas de créer le $_SESSION['acces'] lorsque qu'un utilisateur se connecte sur ton site.
J0r_x est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 11h09   #10
Membre à l'essai
 
Étudiant
Inscription : janvier 2007
Messages : 121
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2007
Messages : 121
Points : 24
Points : 24
Par défaut ...

il n'y a pas différentes personnes qui se connectent elles sont toutes du même type
luciedoudou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 11h16   #11
Membre actif
 
Inscription : août 2002
Messages : 194
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 194
Points : 194
Points : 194
Envoyer un message via MSN à Léortien
Citation:
Envoyé par luciedoudou
malheuresement je n'ai pas tout compris dans ton message
j'ai donc apporté des changements comme je comprenais

Code :
1
2
3
4
5
6
7
8
9
<?php
 
	session_start();
	$_SESSION["acces"] = "acces";
	// Connexion à la base
	require "bd-mysql.php";
 
 
?>
non le $_SESSION["acces"] = "acces"; n'est pas destiné à cet endroit là

mais la partie indentification (la page ou tu vérifies dans la base si l'utilisateur a donné le bon mot de passe etc...)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
if ( $nbres == 0 ) //on scann la table pour voir si l'utilisateur est présent
{//si non alors
    echo 'connexion refusée';
}
else
 
{//si oui
       session_start();
       $_SESSION['acces']="admin";
 
header("location:feuilledechoix.php");
}
comme ça quand il se connecte et qu'il correspond bien à un utilisateur enregistré on ajoute dans sa session la valeur "admin" pour la variable acces.
(faut pas hésiter à me reprendre si je dis une bétise)

et donc du coté des pages à protéger
avec le code de J0r_x
tu vérifies si la variable acces est en session et si sa valeur est admin (car la page est une page destinée aux admins... )
et si oui alors tu affiches la pages
et sinon tu affiches
le message: Cette partie du site est reservé aux admins





edit : p.s.: qu'il y ait des admins, des users et autre ou juste des utilisateurs tous égaux ça ne change rien au principe (sauf que c'est plus simple car il aurait fallut gérer les différents droits)
Léortien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 11h24   #12
Membre à l'essai
 
Étudiant
Inscription : janvier 2007
Messages : 121
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2007
Messages : 121
Points : 24
Points : 24
Par défaut okok

merci je v essayer comme ca en cas de probléme je post
luciedoudou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 12h22   #13
Membre à l'essai
 
Étudiant
Inscription : janvier 2007
Messages : 121
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2007
Messages : 121
Points : 24
Points : 24
Par défaut un petit pas...

bon j'ai réussi a corriger la redirection

le probléme c'est que une fois sur ma page 2, si on retappe l'url tout le monde peut voir la page et moi je ne veux pas


je sais qu'il faut que j'utilise les variables session mais j'ai beaucoup de mal avec

page identification 1

Code :
1
2
3
4
5
6
7
8
9
<?php
 
	session_start();
	$_SESSION["utilisateur"] = "connect";
	// Connexion à la base
	require "bd-mysql.php";
 
 
?>
page de destination 2

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
<?php
session_start();
 
if(isset($_SESSION['utilisateur'])) {
   echo 
 
 
 
 
 
 
<!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=ISO-8859-1" />
<title>Feuille de choix</title>
<link rel = "stylesheet" type="text/css" href="style.css">
</head>
 
<body>
 
 
<div id="btnfeuilledechoix">
 
<span id="bg"><a href="listeprojet.php"><input name="bouton" type="button" value=" Travaux en cours " /></a></span>
 
<span id="bd"><a href="nouveauprojet.php"><input name="bouton" type="button" value=" Nouveaux projet " /></a></span>
</div>
 
 
</body>
</html>
 
 
 
}
else
{
   session_destroy();
   echo "pas de session en cours";
}
?>
merci de m'aider
luciedoudou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 05h14   #14
Membre à l'essai
 
Étudiant
Inscription : janvier 2007
Messages : 121
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2007
Messages : 121
Points : 24
Points : 24
Par défaut c'est incroyable

tout fonctionne et pourtant je n'ai rien changé

merci pour votre aide
luciedoudou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 09h14   #15
Membre actif
 
Inscription : août 2002
Messages : 194
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 194
Points : 194
Points : 194
Envoyer un message via MSN à Léortien
je crois savoir pourquoi ça a mal fonctionné quelques temps :
les sessions


je pense que tu t'es d'abord connnecté avec un utilisateur valide
et donc en session tu avais bien $_SESSION["utilisateur"] de définit et qui valait" connect"

et donc en retappant l'url directement ta session était encore active et donc tu avais toujours $_SESSION["utilisateur"] définit


puis tu as du fermer ton navigateur, le relancer (ça t'a donné un autre identifiant de session) et refaire le test
vu que ta session était différente, plus de $_SESSION["utilisateur"] et donc l'accès a bien été refusé.




donc en résumé : tout tester les sessions ne pas oublier de fermer son navigateur internet (toutes les fenetres du nagivateur qui peuvent etre ouvertes?? j'avoue je ne sais plus trop) et de le rouvrir
Léortien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2007, 10h32   #16
Membre à l'essai
 
Étudiant
Inscription : janvier 2007
Messages : 121
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2007
Messages : 121
Points : 24
Points : 24
oui il fallait vider les cookie du navigateur et la mes pages annexes étaient indisponible sans l'identification préalable
luciedoudou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2007, 11h16   #17
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
Eu non pas les cookies les cookies et les session n'ont rien a voir! Par contre tu pourrai faire un bouton qui détruit la session, regarde du cote de session_destroy
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 11h20   #18
Membre régulier
 
Inscription : janvier 2007
Messages : 85
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 85
Points : 80
Points : 80
Salut,
Il est même préférable de fermer une session avec l'instruction session_destroy()
car pour éviter les déconnexion intempestives les serveurs gardent les session en mémoire un certain temps ce qui représente un certain risque de sécurité.

en detruisant la session, ce risque disparait totalement. Le plus dur est de donner l'habitude à ses membres de fermer la session avant de fermer le navigateur.

@++
p.legal 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 19h54.


 
 
 
 
Partenaires

Hébergement Web