Bonjour
Je cherche à faire une classe de login que je pourrais réutiliser sur plusieurs sites et en testant je suis tombé sur un problème que je n'arrive pas à résoudre. C'est très frustrant, j'en appelle à votre sagesse.
J'ai une page de login avec un formulaire :
Ce petit formulaire doit normalement me renvoyer un tableau de variables $_POST. Au submit du formulaire, on recharge la page avec ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24<form action="" method="post" name="FormLogin" id="FormLogin" onSubmit="document.getElementById('MdpCode').value=SHA1(document.getElementById('Mdp').value);document.getElementById('Mdp').value='';" > <input name="MdpCode" id="MdpCode" type="hidden" value="0" > <table > <tr> <td colspan="3"><span style="color:#FF0000"><?php echo $MessageDErreur; ?></span></td> </tr> <tr> <td width="181"><div align="right">Login</div></td> <td width="8"> </td> <td width="127"> <input name="Log" type="text" id="Log" size="15" maxlength="15" /> </td> </tr> <tr> <td><div align="right">Mot de passe </div></td> <td> </td> <td><input name="Mdp" type="password" id="Mdp" size="15" maxlength="15" /></td> </tr> <tr> <td colspan="3"><input name="BtValidLogin" type="submit" value="Valider" /></td> </tr> </table> </form>
Le fichier debutexec.php contient :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <?php session_start(); print_r($_POST); $PageLogin=true; include("./scripts/debutexec.php"); $MessageDErreur=""; if(isset($_POST["BtValidLogin"])) { if($Login->Login($_POST["Log"],$_POST["MdpCode"])) { header("Location: index.php"); } else { $MessageDErreur="Mauvais login ou mot de passe"; } } ?>
et le fichier classlogin.php contient :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <?php include("classlogin.php"); if(!isset($_SESSION["plop"])) { $Login=new ClassLogin; } else { $Login=unserialize($_SESSION["plop"]); } if(!$Login->VerifLogge() && !isset($PageLogin)) { header("Location: login.php"); } ?>
mon problème est que la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?php abstract class BaseLogin { public $DroitsUtil=array(); public $Connecte; public $IdUtil; public $LoginUtil; public $MailUtil; public $IP; public $DateHeureConnexion; public $DateHeureDernierePage; public function DetruireSession() { if(isset($_COOKIE[session_name()])) { setcookie(session_name(), '',(time()-42000), '/'); } unset($_SESSION); session_destroy(); } } class ClassLogin extends BaseLogin { public function __construct() { $this->Connecte=false; $this->IdUtil=0; $this->LoginUtil=""; $this->MailUtil=""; $this->IP=$_SERVER['REMOTE_ADDR']; $this->DateHeureConnexion=0; $this->DateHeureDernierePage=0; } public function VerifLogge() { if($this->Connecte && $this->IdUtil!=0 && $_SERVER['REMOTE_ADDR']==$this->IP && (time()-$this->DateHeureDernierePage)<=1800) { $this->DateHeureDernierePage=time(); return true; } else { return false; } } public function Login($Login, $Mdp)//$Login et $Mdp passés en POST, $Mdp crypté en SHA-1 { //Ajouter addslashes si les magic quotes ne sont pas déjà activés dans php.ini $Login=htmlentities($Login); while(1==1) { return true; break; } } } ?>renvoie
Code : Sélectionner tout - Visualiser dans une fenêtre à part print_r($_POST);sauf si je mets en commentaire la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part Array()J'ai donc l'impression qu'il y a un problème au niveau du unserialize d'un objet, mais ce qui est bizarre, c'est que si le unserialize devait vider le $_POST (ce qui est déjà bizarre), il ne devrait le faire que quand il est appelé. Or le simple fait que cette ligne soit présente dans le code suffit à vider mes $_POST.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $Login=unserialize($_SESSION["plop"]);
Si quelqu'un a une idée de ce qui pourrait se passer, merci beaucoup d'avance parce que moi je sèche.
Partager