[RESOLU] Problème avec $_SESSION[]

Petit nouveau ! | 5 Messages

03 juin 2014, 17:19

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.

Mammouth du PHP | 1339 Messages

03 juin 2014, 18:22

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.
Bon sinon tu me fais un message privé et on se fait un TeamViewer

ViPHP
xTG
ViPHP | 7331 Messages

03 juin 2014, 18:33

@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;

Petit nouveau ! | 5 Messages

03 juin 2014, 18:59

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]
Modifié en dernier par ibouch le 03 juin 2014, 21:02, modifié 1 fois.

ViPHP
xTG
ViPHP | 7331 Messages

03 juin 2014, 19:47

var ou var1 ? ;)
Sinon je ne vois pas pourquoi cela ne marcherai pas...

Petit nouveau ! | 5 Messages

03 juin 2014, 20:09

xTG tu veux dire deux variables sessions ? Une variable pour authentification réussie et une variable authentification échoué ?

ViPHP
xTG
ViPHP | 7331 Messages

03 juin 2014, 20:54

Non je voulais juste dire que dans ton exemple tu renseignes var1 mais tu affiches var tout court.

Petit nouveau ! | 5 Messages

03 juin 2014, 21:02

Ah non x) simple erreur de frappe désolé

Petit nouveau ! | 5 Messages

03 juin 2014, 21:51

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