Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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
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
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
Bonjour,
As-tu essayé avec la méthode suivante ?
$cookie = Zend_Http_Cookie::factory('parfum=' . urlencode('pépites de chocolat')); $client->setCookie($cookie);
Sinon, il te reste toujours la méthode à l'ancienne :
setcookie('parfum', 'pépites de chocolat', $expiration, '/');
Et pour que la seconde application récupère le cookie :
$this->_request->getCookie('parfum');
+
Hors ligne
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
Une petite idée : charger la classe Zend_Http_Cookie via Zend_Loader::loadClass('Zend_Http_Cookie') ?
De rien
Hors ligne
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
fait et ça ne marche pas
Hors ligne
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 :
$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
Hors ligne
Je déterre ce sujet car j'essaye de créer un cookie à partir d'un controller, j'ai utiliser la méthode suivante :
$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
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
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 :
/** * 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) :
// 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
Moi ça ne marche pas bien la fonction native setcookie("locale", $locale, time() + 12960000, '/');
Hors ligne
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