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 20/05/2011, 10h09   #1
Nouveau Membre du Club
 
Inscription : juillet 2010
Messages : 196
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 196
Points : 25
Points : 25
Par défaut Problème de droits utilisateurs

Bonjour, j'ai une application qui comporte deux niveaux de sessions.
Une admin et une membre.

--> J'aimerais afficher dans une même page que certaines partie de la page en fonction du statut de la personne.
Voilà comment est ma page index.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
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
<?php 

session_start();
	
require("auth.php");

if(Auth::isLogged())
{	
	header('location:indexdejalog.php');
}

if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass']))
{
	
	$login = ($_POST['login']);
	$pass= ($_POST['pass']);
	$pass=sha1($pass); // on crypte le mot de passe tapé en sha1
	$con = odbc_connect("geststockmazars","",""); // on se connecte à la base de données
	$sql = " SELECT id,statut FROM users WHERE login='$login' and pass='$pass'";

	// on effectue la requête sql
		$req = odbc_do($con, $sql)or die( odbc_error() );

		
	// on teste le nombre de résultat

		if(odbc_num_rows($req)>0)
		{	// s'il est supérieur à 0 c'est que l'utilisateur existe
			$data= odbc_fetch_array($req);
			// on créé un tableau de session où on stocke les différentes informations
			$_SESSION['Auth'] = array(
			'login' => $login,
			'pass' => $pass,
			'statut' => $data['statut']);
					
//on teste si il est admin ou non et en fonction de cela on le redirige					
			if($_SESSION['Auth']['statut'] == 'admin')
			{
				header('Location:pageprivee.php');	
			}
			else
			{
				header('Location:pagepublique.php');
			}
		}
		
}

[....]

<form action="index.php" method="post">

<h4> Merci d'entrez vos identifiants afin d'accéder au gestionnaire  </h4>
							   Login: <input type="text" name="login" value=""><br>
							   Mot de passe: <input type="password" name="pass" value=""><br>

<p>
<input type="submit" value="Se connecter">
<input name="retour" type="button" value="Retour" onClick="history.go(-1)">
</p>
</form>
Et comment se compose la page auth :

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
<?php


	Class Auth{
		static function isLogged()
		{
			if(isset($_SESSION['Auth']) && isset($_SESSION['Auth']['login']) && isset($_SESSION['Auth']['pass']) )
			{	
				extract($_SESSION['Auth']);
					$con = odbc_connect("geststockmazars","","");
				$sql = " SELECT id from users where login='$login' and pass='$pass'";
				$req = odbc_do($con, $sql)or die( odbc_error() );
		
				if(odbc_num_rows($req)>0)
				{
					return true;
				}
				else
				{
					return false;
				}
	        }
			else
			{
				return false;
			}
		}
		
		static function isAdmin()
			{
				if(isset($_SESSION['Auth']) && isset($_SESSION['Auth']['login']) && isset($_SESSION['Auth']['pass']) )
				{
					extract($_SESSION['Auth']);
					$con = odbc_connect("geststockmazars","","");
					$sql = " SELECT statut from users where login='$login' and pass='$pass'";
					$req = odbc_do($con, $sql)or die( odbc_error() );
					
					if($req == 'admin')
					{
						return true;
					}
					else
					{
						return false;
					}
				}
				else
				{
					return false;
				}
			}
			
	}

?>
CHOSE IMPORTANTE A NOTER ! Si je change la partie en orange par :
if($req = 'admin')

Je n'ai plus ce problème de redirection mais ça ne résoud pas mon problème

Le problème que j'ai est que lorsque je me connecte avec l'utilisateur ayant les droits d'admin je suis automatiquement redirigé vers la page indexdejalog.php (cf partie en couleur) alors que normalement l'admin n'est pas encore logué vu que la mise en place de auth se fait dans la boucle après.

Je n'ai en revanche pas de problèmes pour la partie membre qui est bien redirigé vers la bonne page.

COmment faire ?



--> De plus, j'ai aussi un problème lors de l'affichage de menu, dans les pages communes aux deux niveaux de session, en fonction de si la personne loguée est membre ou admin.
Je n'arrive pas à afficher le menu que je souhaite.
VOilà un exemple d'une partie d'une age :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
	if(Auth::isAdmin())  
		{
 
			include("menuhautprivee.php");
 
		}
		else
		{
 
			include("menuhautpublic.php");
 
		}
Je teste qui est connecté grâce à ma fonction isAdmin et j'affiche en conséquence.

Conclusion : il semble y avoir un problème avec ma fonction isAdmin.

Merci d'avance !!!
polux31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 10h44   #2
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Que contient $req in-fine ?
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 11h18   #3
Nouveau Membre du Club
 
Inscription : juillet 2010
Messages : 196
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 196
Points : 25
Points : 25
Il devrait contenir soit admin soit membre vu que je récupère le statut (soit membre soit admin) en fonction du login et mot de passe.
Comment vérifier ça ? Je sais que var_dump existe mais y a-t-il une autre solution ?
polux31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2011, 00h49   #4
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Justement, il ne faut savoir ce qu'il faudrait qu'il y ait mais ce qui passe réellement.

echo, var_dump, log ou envoi par mail... Peu importe la méthode tant que vous arrivez à trouver !
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2011, 10h10   #5
Nouveau Membre du Club
 
Inscription : juillet 2010
Messages : 196
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 196
Points : 25
Points : 25
J'ai fait : var_dump($req);


resource(5, odbc result)

EDIT :
j'ai donc testé en mettant $req == 5 (c'est quand je suis connecté avec le compte admin, si c'est le compte membre ça renvoi 6. Mais pourquoi ça me renvoi un chiffre et non pas le nom du statut comme je le demandais dans la requête ?)

Cependant je ne suis plus redirigé vers la page qui me dit que je suis déjà connecté mais les autres pages ne fonctionnent toujours pas.
EDIT : C'est bon j'ai résolu il fallait faire un tableau $data.
polux31 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 16h11.


 
 
 
 
Partenaires

Hébergement Web