Page 1 sur 1

Problème avec $_SESSION[]

Posté : 03 juin 2014, 17:19
par ibouch
Bonjour à tous, j'ai mon formulaire comme voici qui me sert de page de connexion :
<!DOCTYPE>
<html>
<head>
<meta charset="utf-8"/>
<title>Pannel Admin</title>
<link rel="stylesheet" type="text/css" href="sshadmin.css"/>
</head>
<body>

<form method="post" action="login.php"> 
 <p>
<label for="user">Login :</label> <input type="text" name="user" id="user" maxlength="20"/>
<label for="passwd">Mot de passe :</label> <br /> <input type="password" name="passwd" id="passwd" maxlength="25"/>
<input type="submit" value="Envoyer" />
 </p>
</form>

</body>
</html>
Qui traite sur ma page login.php :
<?php
session_start();
header('Content-type: text/html; charset=UTF-8');

$user = (!isset($_POST['user']) OR empty($_POST['user'])) ? $user= null : $user= htmlspecialchars($_POST['user']);
$passwd = (!isset($_POST['passwd']) OR empty($_POST['passwd'])) ? $passwd= null : $passwd= htmlspecialchars($_POST['passwd']);

if  ($user== null OR $passwd== null)  
{ 
	$_SESSION['authentification']= false;
	$auth0= $_SESSION['authentification'];
	header('Location: index.php'); }
else 	
{  
	try  { $bdd = new PDO ('mysql:host=localhost;dbname=olympe','root','', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } 
	catch (Exception $e) { exit('Erreur : '.$e->getMessage()); }
	   $login = $bdd->query('SELECT user, password FROM admin');
	   $admin = $login->fetch();
	if  (($user != $admin['user']) OR ($passwd != $admin['password'])) 	
 	{   
 	 $_SESSION['authentification']= false;
 	 $auth0= $_SESSION['authentification'];
 		echo("Accès refusé | Login ou Password erroné !");
 	}
	else { $_SESSION['authentification']= true;
	$auth0= $_SESSION['authentification'];
	header('Location: index.php'); }
} 

?>
Tout mon script pour l'instant marche correctement pour la validation des identifiants depuis le formulaire.
Mon problème est le suivant, en fonction de certains paramètres je veux que ma variable de session qui me sert d'authentification soit false or true.
Donc dans mon cas j'ai 3 scénarios : 1- Si les variables POST ne sont pas présentes ou vides je veux que ma variable de session réponde : false. (logique me dirais vous). Pour l'instant il fait juste une redirection sur la page de connexion.
2- Le mot de passe et / ou le nom d'utilisateur saisie est incorrect, là encore il faudrait que ma variable de session réponde : false. Pour l'instant j'affiche juste un message d'erreur
3- Et enfin le 3ème cas où les identifiants sont corrects, je veux que ma variable de session réponde : true. Pour l'instant je fais une redirection sur le panel de connexion car je n'ai pas encore fait de page admin. Et justement c'est là que ma variable de session rentre en jeu, il faut que ma page admin soit accessible que si ma variable de session à comme valeure : true
Donc c'est un accès sécurisé normalement ? Vu que elle ne peut être : true , que si mes identifiants sont corrects.

Merci qui pourraient m'expliquer pourquoi mes variables de session ne fonctionnent pas.

Re: Problème avec $_SESSION[]

Posté : 03 juin 2014, 18:22
par Elie
Je pense qu'il ne faut pas dire true ou false mais renseigné ou non ...
De toute facon tant que cette variable n'est pas renseigné est n'existe pas.

Si l'identification est bon tu fais : $_SESSION['authentification'] = 1;
Si tu veux la supprimer : unset($_SESSION['authentitication']);
Et si tu veux savoir si elle existe : if(!empty($_SESSION['authentitication'])) { }
Car meme si elle est false et que tu fais if(isset($_SESSION['authentitication'])) pour lui elle est renseigné... Pareil que si elle vaut 0, elle est renseigné.
D'ou l'utilité de !empty() au lieu de isset() qui ne prend pas en compte 0 et false.

Re: Problème avec $_SESSION[]

Posté : 03 juin 2014, 18:33
par xTG
@Elie> tu t'emmêles les pieds. ;)
faq-tutoriels/validation-isset-null-aut ... 55737.html

@ibouch> Ton souci vient de ce genre de code :
$user = (!isset($_POST['user']) OR empty($_POST['user'])) ? $user= null : $user= htmlspecialchars($_POST['user']);
Dans le cas où tu souhaites stocker null tu stockes en fait le retour de l'opération $user = null qui est... Toujours vrai => true ;)
$user = ($user = null);
// équivaut à :
$user = true;
// car $user = null; ne peut échouer
$variable = (cond) ? null : $uneAutreVariable;

Re: Problème avec $_SESSION[]

Posté : 03 juin 2014, 18:59
par ibouch
Oui mais normalement on est d'accord quand quand je décide d'afficher ma variable de session elle me renseignera soit 0 soit 1 ?
Pourquoi dès lors que je décide de dire
if (condition) { 
$_SESSION['var1']=0
}
else {
$_SESSION['var1']=1
}
echo($_SESSION['var1']);
Sa ne marche pas.
Parceque quand les identifiants sont corrects il faut qu'elle prenne 1 en valeur et si il y a un identifiants incorrect ou qu'il tente d'accéder directement à login.php sans le formulaire elle doit prendre 0. J'arrive à afficher des messages d'erreurs pour chaque problèmes mais pas à faire affecter une valeur à ma variable de session.
Je trouve sa curieux
[EDIT]

Re: Problème avec $_SESSION[]

Posté : 03 juin 2014, 19:47
par xTG
var ou var1 ? ;)
Sinon je ne vois pas pourquoi cela ne marcherai pas...

Re: Problème avec $_SESSION[]

Posté : 03 juin 2014, 20:09
par ibouch
xTG tu veux dire deux variables sessions ? Une variable pour authentification réussie et une variable authentification échoué ?

Re: Problème avec $_SESSION[]

Posté : 03 juin 2014, 20:54
par xTG
Non je voulais juste dire que dans ton exemple tu renseignes var1 mais tu affiches var tout court.

Re: Problème avec $_SESSION[]

Posté : 03 juin 2014, 21:02
par ibouch
Ah non x) simple erreur de frappe désolé

Re: Problème avec $_SESSION[]

Posté : 03 juin 2014, 21:51
par ibouch
if (!isset($_SESSION['authentification']) OR ($_SESSION['authentification']== false) OR ($_SESSION['authentification']==null))
 {
	echo('Non interdit');
}
elseif (isset($_SESSION['authentification']) && $_SESSION['authentification']== true)
 {
	echo('Oui autoriser');
}
else {
echo "non définie";
}
Vola après quelques essaies je pense avoir réussi