Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 01-08-2007 15:54:04

mayaka
Nouveau membre
Date d'inscription: 31-05-2007
Messages: 8

Cookie et Zend Framework

Bonjour, 
Comment lire un cookie (qu'on vient d'ecrire sur le client ) avec le  Zend framework  ?


pour ecrire
// D'abord, instancier le client
        $client = new Zend_Http_Client();
        // En fournissant un objet Zend_Http_Cookie
       
        $client->setCookie('parfum', 'pépites de chocolat');

et pour lire ??????

Merci d'avance

Hors ligne

 

#2 01-08-2007 16:01:59

Ysaak
Membre
Lieu: Strasbourg
Date d'inscription: 18-06-2007
Messages: 33

Re: Cookie et Zend Framework

Bonjour mayaka,

Tu peux récupérer ton cookie grace à l'objet request comme si tu récupérais un variable de type GET ou POST.

Je vais vérifier s'il n'y a pas un moyen plus direct qu'avec getParam()

Edit: il existe bien une méthode getCookie($name). Utilise là pour le récupérer

+, Damien

Dernière modification par Ysaak (01-08-2007 16:03:43)

Hors ligne

 

#3 02-08-2007 11:55:52

mayaka
Nouveau membre
Date d'inscription: 31-05-2007
Messages: 8

Re: Cookie et Zend Framework

Pour être plus précis sur mon probléme:
  je dois créer une application d'athentification, une fois l'utilisateur à valider le formulaire login+pwd
je check dans la base de données si il les droit
si oui je dois écrire un cookie sur le poste client
et puis rediriger vers une autre application qui ,elle, doit lire ce cookie pour verifier si l'utilisateur a accés ou pas

Mon soucis et comment ecrire le cookie (ça ne marche pas avec le code que j'ai mis plus haut)
et aprés comment la deuxiéme application doit le lire

Merci d'avance , ça me sauvera la vie ;-)

Hors ligne

 

#4 02-08-2007 12:57:25

Ysaak
Membre
Lieu: Strasbourg
Date d'inscription: 18-06-2007
Messages: 33

Re: Cookie et Zend Framework

Bonjour,

As-tu essayé avec la méthode suivante ?

Code:

$cookie = Zend_Http_Cookie::factory('parfum=' . urlencode('pépites de chocolat'));
$client->setCookie($cookie);

Sinon, il te reste toujours la méthode à l'ancienne :

Code:

setcookie('parfum', 'pépites de chocolat', $expiration, '/');

Et pour que la seconde application récupère le cookie :

Code:

$this->_request->getCookie('parfum');

+

Hors ligne

 

#5 02-08-2007 13:18:56

mayaka
Nouveau membre
Date d'inscription: 31-05-2007
Messages: 8

Re: Cookie et Zend Framework

Merci
j'ai utilisé setCookie à la place Zend_Http_Cookie::factory car il me renvoie tjrs une erreur

PHP Fatal error:  Call to undefined method Zend_Http_Cookie::factory() in

quelqu'un  a une idée why ?

Hors ligne

 

#6 02-08-2007 13:46:59

haltabush
Membre
Lieu: Saumur
Date d'inscription: 20-04-2007
Messages: 64

Re: Cookie et Zend Framework

Une petite idée : charger la classe Zend_Http_Cookie via Zend_Loader::loadClass('Zend_Http_Cookie') ?
De rien tongue

Hors ligne

 

#7 02-08-2007 13:52:02

Ysaak
Membre
Lieu: Strasbourg
Date d'inscription: 18-06-2007
Messages: 33

Re: Cookie et Zend Framework

J'ai également essayé et j'ai exactement le même problème ...
La classe est chargée correctement pourtant ...

Je suis à cours d'idée.

Hors ligne

 

#8 02-08-2007 13:54:46

mayaka
Nouveau membre
Date d'inscription: 31-05-2007
Messages: 8

Re: Cookie et Zend Framework

fait et ça ne marche pas

Hors ligne

 

#9 02-08-2007 15:43:12

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Cookie et Zend Framework

En regardant dans le code (1.0.0), la méthode factory n'existe pas effectivement. Pour créer un Zend_Http_Cookie, il semble qu'il faille faire :

Code:

$cookie = new Zend_Http_Cookie($name, $value, $domain);
$client->setCookie($cookie);

Je n'ai pas testé, tu peux nous dire si ça marche mayaka ?

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#10 27-03-2008 14:09:33

Roulio
Membre
Lieu: Alsace
Date d'inscription: 20-11-2007
Messages: 137
Site web

Re: Cookie et Zend Framework

Je déterre ce sujet car j'essaye de créer un cookie à partir d'un controller, j'ai utiliser la méthode suivante :

Code:

 
$client = new Zend_Http_Client(SITE_ABS_URL);
$acceptCookie = $this->_request->getCookie('acceptCookie',0);
if(empty($acceptCookie)) {
    //On stocke sous forme de tableau
    $name     = 'acceptCookie';
    $value     = 'ok';
    $domain = '/';
    $time = (time() + 24*3600*7*52);
    $cookie = new Zend_Http_Cookie($name, $value, $domain);
    $client->setCookie($cookie);
    // echo $cookie->__toString();
}

avec SITE_ABS_URL = http://localhost/~subdirproject/

mais vous vous en doutez, le cookie n'est jamais créé.
J'ai essayé sans spécifier de domain (ne marche pas)
J'ai essayé de créer un cookie dans index.php avec setcookie, pour être sûr que ça fonctionne en local (et là ça marche) mais ça ne m'arrange pas.

Est ce quelqu'un pourrait m'éclairer sur ce sujet merci.

Dernière modification par Roulio (27-03-2008 14:09:50)

Hors ligne

 

#11 27-03-2008 14:26:51

Roulio
Membre
Lieu: Alsace
Date d'inscription: 20-11-2007
Messages: 137
Site web

Re: Cookie et Zend Framework

Trois minutes de plus dans mes recherches aurait suffit pour ne pas écrire le post précédent mais la solution peu en intéresser plus d'un :

Donc la solution c'est d'écrire simplement setcookie(...); comme dans un fichier php classic. Faut-il encore le savoir!
J'ai pas tout compris de l'utilité de Zend_Http_Cookie mais si vous cherchez à créer des cookies simples ne l'utilisez pas.

Dernière modification par Roulio (27-03-2008 14:28:15)

Hors ligne

 

#12 20-05-2008 01:15:05

Azema
Membre
Lieu: Paris
Date d'inscription: 26-09-2007
Messages: 51
Site web

Re: Cookie et Zend Framework

Salut à tous,

Pour rester dans le contexte du Zend Framework, je me suis créé un helper HeadCookie que j'alimente avec un objet Zend_Http_Cookie et que j'appelle dans mon header.
Ca fonctionne plutôt pas mal.

Pour ceux que ça intéresse, voici le helper :

Code:

/**
 * Helper to add a setcookie() tag value to a Placeholder
 */
class Tf_View_Helper_HeadCookie
{

    /**
     * Instance of parent Zend_View object
     *
     * @var Zend_View_Abstract
     */
    public $view = null;

    /**
     * The default Zend_View_Helper_Placeholder instance
     *
     * @var Zend_View_Helper_Placeholder
     */
    protected $_placeholder = null;

    /**
     * Le cookie 
     * 
     * @var Zend_Http_Cookie
     */
    protected $_cookie = null;
    
    /**
     * Constants
     */
    const COOKIE_NAMESPACE = 'ZEND_COOKIE_SCRIPT';
    
    /**
     * Retourne l'objet Zend_Http_Cookie
     * 
     * @return Zend_Http_Cookie
     */
    public function get_cookie()
    {
        return $this->_cookie;
    }

    /**
     * Definit le cookie si tous les parametres sont passes
     *
     * @param Zend_Http_Cookie $cookie
     * 
     * @return Zend_View_Helper_Cookie
     */
    public function headCookie($cookie)
    {
        if (is_null($this->_placeholder)) {
            $this->_placeholder = $this->view->placeholder();
        }
        if ($cookie instanceof Zend_Http_Cookie) {
            $this->set($cookie);
        }
        
        return $this;
    }

    /**
     * Set view object
     *
     * @param  Zend_View_Interface $view
     * 
     * @return Zend_View_Helper_HeadCookie
     */
    public function setView(Zend_View_Interface $view)
    {
        $this->view = $view;
        return $this;
    }

    /**
     * Check for the existence of the cookie
     *
     * @return bool
     */
    public function has()
    {
       return $this->_placeholder->has(self::COOKIE_NAMESPACE);
    }

    /**
     * Set the value for a Placeholder self::COOKIE_NAMESPACE key.
     * Overwrites existing value.
     *
     * @param Zend_Http_Cookie $cookie
     * 
     * @return Zend_View_Helper_Cookie
     */
    public function set($cookie)
    {
        if ($cookie instanceof Zend_Http_Cookie) {
            $this->_cookie = $cookie;
            $this->_placeholder->set(self::COOKIE_NAMESPACE, $cookie);
        }
        return $this;
    }

    /**
     * Return the value of a Placeholder self::COOKIE_NAMESPACE key
     *
     * @return mixed
     */
    public function get()
    {
        if ($this->_placeholder->has(self::COOKIE_NAMESPACE)) {
            return $this->_placeholder->get(self::COOKIE_NAMESPACE);
        }
        return null;
    }

    /**
     * Unset the value of a Placeholder self::COOKIE_NAMESPACE key
     *
     * @return Zend_View_Helper_Cookie
     */
    public function remove()
    {
        $this->_placeholder->remove(self::COOKIE_NAMESPACE);
        return $this;
    }

    public function send()
    {
        if (!is_null($this->_cookie) && $this->_cookie instanceof Zend_Http_Cookie) {
            $cookie = $this->get_cookie();
            setcookie(    $cookie->getName(),
                        $cookie->getValue(),
                        $cookie->getExpiryTime(),
                        $cookie->getPath(),
                        $cookie->getDomain(),
                        $cookie->isSecure(),
                        $cookie->isHttpOnly());
        }
    }
    
    /**
     * Alias to toString for public API
     * 
     * @return string
     */
    public function toString()
    {
        return $this->__toString();
    }

    /**
     * __toString function for this class
     *
     * @return string
     */
    public function __toString()
    {
        if (!is_null($this->_cookie) && $this->_cookie instanceof Zend_Http_Cookie) {
            $cookie = $this->get_cookie();
            
            if ($cookie->isSecure()) $secure = 'true';
            else $secure = 'false';
            
            if ($cookie->isHttpOnly()) $httpOnly = 'true';
            else $httpOnly = 'false';
            
            return 'setcookie("' . $cookie->getName() .'","'
                                . $cookie->getValue() .'",'
                                . $cookie->getExpiryTime() .',"'
                                . $cookie->getPath() .'","'
                                . $cookie->getDomain() .'",'
                                . $secure .','
                                . $httpOnly .');';
        } 
    }

}

J'ai aussi ajouté un paramètre à la classe Zend_Http_Cookie afin qu'il prenne en compte le paramètre 'httpOnly' que j'ai mis par défaut à true.

Et l'appel dans mon header (Au tout début du fichier, si vous ne savez pas pourquoi, lisez ceci) :

Code:

// Je vérifie la présence de mon objet cookie
<?php if (isset($this->hasCookie) && $this->hasCookie === true
            && (isset($this->cookie) && $this->cookie instanceof Zend_Http_Cookie)) : ?>
    <?php
        // J'appelle mon helper avec l'objet Zend_Http_Cookie en paramètre
        $headCookie = $this->headCookie($this->cookie);
        // Ensuite, j'envoie mon cookie à l'utilisateur
        $headCookie->send(); ?>
<?php endif; ?>

Si cela peut servir à d'autres.

Cordialement, Azema.

Hors ligne

 

#13 08-07-2008 17:47:10

Azema
Membre
Lieu: Paris
Date d'inscription: 26-09-2007
Messages: 51
Site web

Re: Cookie et Zend Framework

Bonjour à tous,

Voici une URL intéressante concernant les cookies et le Zend Framework.

Voir sur le blog de BigOrNot (en)

Cordialement, Azema.

Hors ligne

 

#14 20-07-2008 19:12:43

Mat
Membre
Lieu: Clermont-Ferrand
Date d'inscription: 20-07-2008
Messages: 15
Site web

Re: Cookie et Zend Framework

Salut !

Merci pour le lien, ça m'a fait découvrir ce forum smile
Pour les anglophobes, si ça vous dit il y a une version française ici


Mat

Hors ligne

 

#15 09-07-2010 10:34:15

citronbleu-v
Membre
Lieu: Béziers ou Arles
Date d'inscription: 03-02-2009
Messages: 79
Site web

Re: Cookie et Zend Framework

Moi ça ne marche pas bien la fonction native setcookie("locale", $locale, time() + 12960000, '/');

Hors ligne

 

#16 09-07-2010 11:52:21

citronbleu-v
Membre
Lieu: Béziers ou Arles
Date d'inscription: 03-02-2009
Messages: 79
Site web

Re: Cookie et Zend Framework

Quelqu'un a trouver la solution pour créer un COOKIE ?

Et pouvoir récupérer le même sur n'importe qu'elle page du site où l'on navigue avec Zend. Ça me rend fou de ne pas y arriver (setcookie marche très mal avec Zend et les urlrewriting je suppose).

merci

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