Hello,
une petite question sur les sessions.
Mon site est sur OVH, logiquement je suis en php 5.3
J'ai un problème sur la récupération des sessions.
Elles sont utilisées au niveau de la page d'administration où je stocke :
- le login
- mdp md5
- et ma connexion à ma bdd
Le site à toujours marché comme ça mais depuis peu, j'ai des erreurs disant que ma session ne peut pas être déserialisée.
unserialize() expects parameter 1 to be string
Voici comment je fais:
Une fois le login et mdp validés, je sérialise mon objet Session (de ma classe session)
ex :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $oSession = new classSession($login, $pwd); // Creation de la session if($oSession -> isValid()) // Si les identifiants sont valides { $_SESSION["oSession"] = serialize($oSession); // on met l'objet session en variable de session Rediriger("admin.php"); // On redirige vers l'espace correspondant }Sur les pages suivantes, voici comment je procède :
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 <?php class classSession { #*********************************************************** # Proprietes #*********************************************************** private $_myLogin; private $_myPwd; private $_oConnection; #*********************************************************** # Constructeur #*********************************************************** public function __construct($myLogin=NULL, $myPwd=NULL) { $this -> _myLogin = $myLogin; $this -> _myPwd = md5($myPwd); $this -> _oConnection = new classConnection(); } #*********************************************************** # Destructeur #*********************************************************** public function __destruct() { $this -> _oConnection -> __destruct(); } #*********************************************************** # Appel le destructeur de maniere implicite #*********************************************************** public function __sleep() { return array('_myLogin', '_myPwd','_oConnection'); } #*********************************************************** # Relance la connexion a la bdd #*********************************************************** public function __wakeup() { } #*********************************************************** # Authentification de l'utilisateur #*********************************************************** public function isValid() { $bool = false; $strSql = " SELECT Utilisateur_Identifiant "; $strSql .= " FROM utilisateur WHERE Utilisateur_Identifiant = '".$this -> _myLogin."'"; $strSql .= " AND Utilisateur_MotDePasse = '".$this -> _myPwd."'"; $this -> _oConnection -> execSql($strSql); if($this -> _oConnection -> getNbRow() != 0) { $bool = true; } return $bool; } } ?>
Alors d'une, la déserialisation ne fonctionne plus (alors que mon site est en ligne depuis quelques mois déjà...et ça marchait bien comme ça...)
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 <?php require("../autoload.php"); session_start(); if(isset($_SESSION['oSession'])) { $oSession = unserialize($_SESSION['oSession']); if($oSession -> isValid() == false) { Rediriger("erreur.php"); } } else { Rediriger("erreur.php"); }
et forcément, comme la désérialisation s'est mal passée, mon objet session n'arrive pas à appeler ma fonction IsValid.
Je tiens à préciser que mes classes sont bien chargées avant.
Alors du coup j'ai résolu ce problème avec la méthode du père François, c'est à dire je ne serialize plus mon objet:
Je fais directement
$_SESSION["oSession"] = $oSession au lieu de $_SESSION["oSession"] = serialize($oSession);
et pareil pour la désérialiser, j'enlève unserialize.
du coup sans sérialiser, les fonctions magiques __sleep() et __wakeup() ne sont plus utilisées je pense.
A moins qu'il y ai eu des changements entre php 5.2 et 5.3...
Faut il continuer à utiliser serialize ? ou est-ce transparent maintenant ?







Répondre avec citation
Partager