Helper Session dans un layout

Par Sean78, il y a 11 ans


Bonjour,
Je n'arrive pas avoir accès au helper Session dans un de mes layout. Et pourtant le helper Session est activé dans le AppController.
De plus en utilisant le plugin Debug Kit il me dit que ma variable session est null et lorsque je fais un débug de $_Session j'y trouve des valeurs. Ca fait 2 jours que je me tire les cheveux et je ne voix pas d'où peut venir l'erreur. Est ce qu'il faut une configuration de la session.

Merci d'avance!!

5 réponses

Azorgh, il y a 11 ans

Salut Sean,

Dans ta vue, tu peux utiliser

$this->Session->read('Auth.User.id')

Pour accéder au variable de sessions. (Ici l'id d'un utilisateur).

Sean78, il y a 11 ans

Salut je fais ceci ```
$this->Session->write('Person.eyeColor', 'Green');

**<Warning (512): Method SessionHelper::write does not exist [CORE/Cake/View/Helper.php, line 192]** Voici le message que j'ai et lorsque je fais ``` debug($this->Session->read()); ``` il me dit que la variable est vide alors que non. Merci, je suis assez perdu!
amethyste, il y a 11 ans

le Helper ne peut pas écrire dans la session les cocos, à l'inverse du Component.
SessionHelper::write , ca n'existe pas, parce que n'est pas une bonne pratique MVC

Sean78, il y a 11 ans

Merci @amethyste du rappel, néanmoins toujours bloqued. Pour faire simple je vous explique ce que je souhaite faire et que peut etre je m'y prends mal.
Donc voilà: lorsqu'un utilisateur se connecte à mon appli je compte le nombre de pages qu'il ouvre. En effet toutes les 5 pages ouvertes il ouvre une image (via fancybox) qui se ferme au bout de 3 secondes. D'où l'idée de faire intervenir les sessions. Dans beforefilter je fais ceci:

public function beforeFilter() {
    $sssi = $this->Session->read('guest.i');

            if ($sssi == '') {
                debug($sssi);
                    $this->Session->write('guest.id',md5(rand(1,100).time()));
                    $this->Session->write('guest.i',1);
                    $de = '<div style="display:none">
                    <a id="single_1" href="img/web-ban-600x500.png">
                        <img src="img/photo/pub/ebenradio.jpg" alt="" />
                    </a>
                </div>';
        $this->set(compact('de'));
        $this->Session->write('de',$de);
                } else {
                    $i = $this->Session->read('guest.i');
                    $j=$i/5;
                    $k = $j - floor($j);
                    $i = $i +1;
                    $this->Session->write('guest.i',$i);
                    if ($k == 0) {
                        $de = '<div style="display:none">
                    <a id="single_1" href="img/photo/pub/eben-radio-cs.png">
                        <img src="img/photo/pub/ebenradio.jpg" alt="" />
                    </a>
                </div>';

                    $this->set(compact('de'));
                    $this->Session->write('de',$de);
                     } else { $this->set('de',''); $this->Session->write('de','');}
                }

}

Et dans mon layout par défaut je fais juste : <?php echo $de; ?> Vous l'imaginez bien ça ne fonctionne pas.
Si vous avez des idées sur une autre façon de faire je suis preneur merci les amis!

amethyste, il y a 11 ans

je pense que tu devrais utiliser les cookies pour faire ça. Ensuite jquery.cookie.js te permettrais de lancer fancybox.