Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-01-2009 11:55:15

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

[1.7.2]Zend_Session::rememberMe()

Bonjour,
j'ai lu pas mal de contributions ici et ailleurs mais souvent ça vole trop haut pour moi à cause de la gestion de la sécurité que je ne maitrise pas encore bien et vu le nombre de "recettes" possibles.
Donc, dans un premier temps je souhaite que ça fonctionne tout simplement, je me poserais les questions de sécurité après...
Ce préambule étant fait, voici ma question :

Si un utilisateur se connecte en cochant la case 'Se souvenir de moi...' alors je fais un Zend_Session::rememberMe(604800) pour conserver l'identification valide dans un cookie pendant une semaine.

Le problème est que la documentation du ZF indique que Zend_Session::rememberMe doit être appelé AVANT Zend_Session::start(), et mon Zend_Session::start() est en début de mon bootstrap, donc avant la connexion et le Zend_Session::rememberMe(604800)...

Comment utiliser Zend_Session::rememberMe(604800) malgré tout ?
Dois-je déplacer le Zend_Session::start() ?

Merci par avance pour votre aide.

Hors ligne

 

#2 10-01-2009 16:59:13

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

Re: [1.7.2]Zend_Session::rememberMe()

Est-ce que tu as regardé si la méthode "setExpirationSeconds" n'influence pas sur le "rememberMe" ?

Car de mémoire ceci est possible :

Code:

<?php

$namespace = new Zend_Session_Namespace('My_Auth');
$namespace->setExpirationSeconds(6000);

Ce qui te permettrait de configurer l'expiration des données lors du login.

Dernière modification par acharrex (10-01-2009 17:03:01)

Hors ligne

 

#3 11-01-2009 02:03:35

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

Re: [1.7.2]Zend_Session::rememberMe()

Il semble que setExpirationSeconds, d'après la documentation, ne reste pas à la fermeture du navigateur.
Contrairement à rememberMe, mais avec le problème auquel je fais allusion dans ma question.

Hors ligne

 

#4 11-01-2009 02:29:48

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

Re: [1.7.2]Zend_Session::rememberMe()

Ca me paraît vraiment bizarre tout ça. Normalement le "rememberMe" serait égal au "setExpirationSeconds" le plus élevé (enfin ça me paraît logique).

M'enfin, tu as regardé si tu pouvais utiliser Zend_Session::setOptions() d'une fois que la session est démarrée afin de modifier la valeur du "rememberMe" ?

Hors ligne

 

#5 11-01-2009 11:53:27

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

Re: [1.7.2]Zend_Session::rememberMe()

Voilà un extrait de la doc officielle :

44.4.4. rememberMe(integer $seconds)

Par défaut, la session se termine lorsque le client ferme son navigateur. Il peut cependant être nécessaire de faire en sorte que même après la fermeture, le cookie de session persiste un certain temps dans le navigateur. Utilisez Zend_Session::rememberMe() avant tout démarrage de la session, afin de spécifier à celle-ci qu'elle devra utiliser un cookie persistant du coté du client. Ce cookie persistera alors $seconds secondes. Si vous ne précisez pas de temps, remember_me_seconds, sera utilisé. Cette valeur se paramètre d'ailleurs au moyen de Zend_Session::setOptions().

Il semble que ce soit la seule possibilité. Sauf bien entendu à gérer soi même les cookies. Mais justement, l'intérêt du ZF c'est de pouvoir se décharger de se genre de truc...

Et en effet, ça marche, mais partiellement. Si je ferme totalement le navigateur, et que je le réouvre, alors je suis toujours connecté. Et ça c'est bien.
Mais si je fais ça le lendemain, plus de connexion, alors que j'ai 604800 dans mon rememberMe, soit une semaine, et ça, ce n'est pas bien du tout.

Bref, la doc est claire : le rememberMe avant tout démarrage de session.

J'avais pensé à faire un destroy de la session si l'utilisateur demande à se connecter pour faire un rememberMe juste avant la procédure de connexion et donc de création de session... Mais si quelqu'un a une solution moins "bourrin" je suis preneur.

Hors ligne

 

#6 12-01-2009 11:07:45

2mx
Membre
Lieu: Grenoble
Date d'inscription: 06-08-2007
Messages: 125

Re: [1.7.2]Zend_Session::rememberMe()

Bonjour,

Pour cette problématique, au moment de l'authentification,  si l'utilisateur coche remember me,  je met en place un cookie $_COOKIE["Mmx_Auth_RememberMe"].

Puis, dans mon bootstrap, si ce cookie est présent j'appelle Zend_Session::rememberMe() et détruit le cookie.

Extraie de mon bootstrap :

Code:

// Session
require 'Zend/Session.php';

// User checked remember me on authetification
if (isset($_COOKIE["Mmx_Auth_RememberMe"])) {
    Zend_Session::rememberMe($appConfig->sessions->rememberMe);
    unset($_COOKIE["Mmx_Auth_RememberMe"]);
}

// set options with multi domain cookie @see : http://www.z-f.fr/forum/viewtopic.php?id=502
// activate session garbage collector disabled by default on Debian gc_probability, gc_divisor @see http://oscarm.org/news/detail/666-debian_php5_and_session_garbage_collection
// @see http://www.nabble.com/Zend_Session::rememberMe()-td19975066.html
$sessionOptions = array(
    'cookie_path' => '/' , 
    'cookie_domain' => '.' . $appConfig->url->domain , 
    'save_path' => self::$_rootPath . '/' . $appConfig->sessions->savePath , 
    'gc_probability' => 1 , 
    'gc_divisor' => 100 , 
    'gc_maxlifetime' => $appConfig->sessions->gc_maxlifetime);
Zend_Session::setOptions($sessionOptions);
Zend_Session::start();

Hors ligne

 

#7 12-01-2009 23:01:52

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

Re: [1.7.2]Zend_Session::rememberMe()

Ok je comprends, ce qui te permet de coller un rememberMe avant Zend_Session::start().

Bon j'espérais qu'il y ait quelque chose de plus direct mais c'est nickel.

Merci !

Hors ligne

 

#8 13-01-2009 08:51:29

2mx
Membre
Lieu: Grenoble
Date d'inscription: 06-08-2007
Messages: 125

Re: [1.7.2]Zend_Session::rememberMe()

Oui, moi aussi je pensai qu'il existait un moyen plus directe et après un post sur la mailing-list il en ressort que non :

http://www.nabble.com/Zend_Session%3A%3Astart()-and-remember-me-td14189207.html

Hors ligne

 

#9 16-02-2009 12:39:39

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

Re: [1.7.2]Zend_Session::rememberMe()

Je reviens sur cette discussion, car je me rends compte qu'en utilisant la technique de 2mx, j'ai un nouvel identifiant de session qui est généré pour un même utilisateur à chaque passage dans le bootstrap...

Bon je n'ai peut être pas tout suivi, mais je ne parviens pas à trouver quelque chose de vraiment clair et fiable.
J'ai lu sur le forum que MrMoOx disait qu'il suffisait d'utiliser Zend_Session::rememberMe(tempsensecondes).
Mais dans la doc du ZF il est dit que ce doit être avant Zend_Session::start()...

Et même si google me ramène plusieurs exemples, un certain nombre restent contradictoires...

Donc si quelqu'un connait l'existence d'un exemple sans ambiguïté, je suis preneur...

Hors ligne

 

#10 16-02-2009 12:55:40

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

Re: [1.7.2]Zend_Session::rememberMe()

Le changement de l'ID de session est normal... le rememberme appelle automatiquement regenerateid()...
Donc normal...
Mais bon ça fait beaucoup de trafic ça non ?

Hors ligne

 

#11 06-09-2010 11:33:32

GueloSuperStar
Membre
Lieu: Paris
Date d'inscription: 05-08-2009
Messages: 107

Re: [1.7.2]Zend_Session::rememberMe()

SaLuT les ZenDer'S,

j'arrive un peu tard pour répondre à ce post mais si ça peux en aider d'autre... :p

Pour ma part j'ai fais :

Code:

$username = $form->getValue('username');
$password = $form->getValue('password');

if (authentication($username,$password )) {
        $rememberMe = $form->getValue('rememberme');
        $seconds  = 60 * 60 * 24 * 7; // 7 days
         if ($rememberMe) {
            Zend_Session::RememberMe($seconds);
        }
        else {
            Zend_Session::ForgetMe();
        }
       $this->_helper->Redirector->gotoSimple('index','index','backo');
    }

A+ Guelo Super Star

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages