Bonjour
J'ai fait des recherches sur le forum, et j'ai lu pas mal de posts, mais je n'ai pas trouvé de cas similaire au mien ( j'espère que je n'ai pas mal cherché)
Je suis en train de réaliser un site en PHP5. Il y a une partie nécessitant une identification. Lorsque la personne a saisi son login et son mot de passe, je crée un objet utilisateur (qui me permet par la suite, de vérifier que la personne à les droits d'accès, et de voir si la session est toujours active).
L'objet utilisateur est sérialisé, puis stocké dans une variable de session. La personne est ensuite redirigée vers une page d'accueil.
Sur cette page, je récupère l'objet utilisateur de cette façon :
En local, le site fonctionne très bien, mais lorsque je le mets en ligne, j'ai une erreur sur la page d'accueil de la personne connectée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $utilisateur = unserialize($_SESSION["utilisateur"]);
suivie d'une belle fatal error :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Warning: __clone method called on non-object in /home/e/esorisis/www/sdmb/index_intranet.php5 on line 14
qui est logique, puisque ma fonction estActif() s'applique à mon objet $utilisateur...
Code : Sélectionner tout - Visualiser dans une fenêtre à part Fatal error: Call to a member function estActif() on a non-object in /home/e/esorisis/www/sdmb/index_intranet.php5 on line 16
Voilà le code de ma page id.php (qui vérifie le login et le mot de passe, puis crée l'objet et le met dans la variable de session) :
Voici le code de la page d'accueil de la personne identifiée (index_intranet.php) :
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 <?php //On démarre une session session_start(); include ("../include/fonctions.php"); include_once("../classes/utilisateur.class.php"); include_once("../classes/mysqlConnexion.class.php"); //On se connecte à la base de données $cx = mysqlConnexion::getInstance(); //On récupère le login et le mot de passe saisi. $login = $_POST["login"]; $mdp = $_POST["md5"]; $nom_page = $_GET["page"]; //Création et exécution de la requête $query = "SELECT login FROM membres WHERE login = '$login' "; $result = $cx->requete($query); $num = $cx->nbrLignes($result); //On vérifie que le nom d'utilisateur entré existe dans la base de données. if ($num == 1) //Le nom d'utilisateur a été trouvé. { $query2 = "SELECT id_membre, login, niveau FROM membres WHERE login = '$login' AND mdp = '$mdp'"; $result2 = $cx->requete($query2); $num2 = $cx->nbrLignes($result2); if ($num2 == 1) //Le mot de passe est correct ainsi que le nom d'utilisateur { $ligne = $cx->recupLigne($result2); $utilisateur = new utilisateur($ligne["id_membre"], $ligne["login"], $_SERVER['REMOTE_ADDR'], $ligne["niveau"]); $_SESSION["utilisateur"] = serialize($utilisateur); redirection("../index_intranet.php"); } else //Mot de passe incorrect { redirection("../identification.php?erreur=1"); } } elseif ($num == 0) //Le nom d'utilisateur est incorrect { redirection("../identification.php?erreur=2"); } ?>
Bon en vous recopiant ce code, je me rends compte que je fais pas mal de tests inutile (je teste plein de fois si la personne est identifiée), mais le problème n'est pas là à mon avis.
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
71
72
73
74
75
76
77
78
79
80
81
82
83 <?php //On démarre la session session_start(); //On inclue le fichier de fonctions qui contient la fonction __autoload() include ("include/fonctions.php"); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <title>MASTER Stratégies de Découverte de Molécules Bioactives</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" media="screen" type="text/css" title="Design SDMB" href="style/style.css" /> </head> <body> <div id="entete"> <img src="images/accueil.gif" title="Accueil" alt="Maison" /><a href="index.php" title="Accueil du site"> Accueil</a> - <?php //Si la personne est identifiée if (isset($_SESSION["utilisateur"])) { //On récupère l'objet contenu dans la variable de session $utilisateur = unserialize($_SESSION["utilisateur"]); //Si la session est toujours active (timeout pas dépassé, et même adresse IP) if ($utilisateur->estActif()) { ?> <img src="images/main.gif" title="Intranet" alt="Main" /><a href="index_intranet.php" title="Accueil de l'Intranet"> Intranet</a> - <?php } } else { ?> <img src="images/main.gif" title="Intranet" alt="Main" /><a href="identification.php" title="Accueil de l'Intranet"> Intranet</a> - <?php } ?> <img src="images/pieds.gif" title="Plan du site" alt="Pieds" /><a href="modele.php" title="Consulter le plan du site"> Plan du site</a> - <img src="images/mail.gif" title="Webmaster" alt="Mail" /><a href="modele.php" title="Contacter le webmaster"> Webmaster</a> </div> <?php //Si la personne n'est pas identifiée, elle est redirigée if (!isset($_SESSION["utilisateur"])) { redirection("index.php"); } ?> <div id="conteneur"> <?php //Si la personne est connectée : if (isset($_SESSION["utilisateur"])) { //Si la connexion est active (même IP et timeout pas dépassé) if ($utilisateur->estActif()) { include ("include/menu_intranet.php"); } //La session n'est plus valide, on redirige l'utilisateur. else { redirection("index.php"); } } ?> <div id="corps"> <div id="contenu"> <h1>Intranet</h1> <p> Bienvenue dans l'espace Intranet du MASTER <strong>Sratégies de Découverte de Molécules Bioactives</strong> ! Depuis cet espace, vous pouvez consulter votre messagerie, les éventuels changement d'emploi du temps, l'annuaire des étudiants et des professeurs ainsi que les cours mis en ligne. </p> <p> Pour des raisons de sécurité, pensez à vous déconnecter du site avant de partir :o) </p> </div> </div> </div> </body> </html>
Si quelqu'un a une idée, sur l'origine de mon erreur ça me sauverait la vie, parce que comme c'est mon premier site en php5, je ne vois pas vraiment l'erreur sûrement bête que j'ai faite
Partager