1 pièce(s) jointe(s)
Unset($_SESSION['foo']) est effectué en dehors de son scope!
Bonjour,
Je n'arrive pas a comprendre pourquoi le unset($_SESSION['flash']) détruit ma variable $_SESSION['flash'] avant même d'avoir appelé la fonction getFlashes() .
merci pour votre aide
Voici mon header.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
code de base du starter template dans les exemples bootstrap
.....
<div class="container">
<?php
$session_instance = Session::getInstance();
echo "<pre>";
var_dump($_SESSION);
echo "</pre>";
if($session_instance->hasFlashes()){ // si il y a une variable de $_SESSION['flash'] d'enregistrer alors
foreach( $session_instance->getFlashes() as $type=>$message){ // il récupère les infos
echo "<div class='alert alert-$type'>$message</div>"; // et les affiche dans une div
}
}
?> |
Sur ma page register.php
il y a bien sur le formulaire et des des appel aux fonctions de vérification puis:
Code:
1 2 3 4 5 6 7 8 9 10
|
if($validator->isValid()){ ///une fois que tous les champs sont validé
App::getAuth()->register($db, $_POST['username'], $_POST['password'], $_POST['email'] ); //enregistre dans la DB
Session::getInstance()->setFlash('success', "Votre compte a été créé. Un email de confirmation vous a été envoyé pour valider votre compte"); //ajoute à la variable session un truc du style : $_SESSION['flash']['success'] ='......message.....";
Redirect::pages('login'); // redirige sur la page login
}else{
$errors = $validator->getErrors(); // si tous les champs ne sont pas valide, il affiche les erreurs
} |
Pour finir ma Session :
Code:
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
|
<?php
namespace Core;
class Session{
static $_instance;
public static function getInstance(){
if(!self::$_instance){ //si elle n'existe pas elle la créer
self::$_instance = new Session;
}
return self::$_instance; // renvois l' instance de Session
}
public function __construct(){
session_start();
}
public function setFlash($statut, $message){
$_SESSION['flash'][$statut] = $message;
}
public function hasFlashes(){
return isset($_SESSION['flash']);
}
public function getFlashes(){
$flash = $this->read('flash');
unset($_SESSION['flash']); // Mon problème se trouve là , unset() efface les infos dans 'flash' avant même que getFlashes() ne soit appelé donc avant même:calim2: que le unset() ne soit appelé!!!
return $flash;
}
public function read($key){
return isset($_SESSION[$key]) ? $_SESSION[$key] : null;
}
public function write($key, $value){
$_SESSION[$key] = $value;
}
public function delete($key){
unset($_SESSION[$key]);
}
} |
Pièce jointe 211256
comme vous pouvez le voir je fais un var_dump avant l'appel de getFlashes() et pourtant $_SESSION['flash'] n'apparait pas et si je commente le unset() dans le fichier Session.php tout se passe bien le message s'affiche MAIS le message reste, vu qu'il n'est plus détruit