Panama Posted June 15, 2010 Share Posted June 15, 2010 Bonsoir à tous,Si un client ne se déconnecte pas de son compte alors son espace privé s’affiche lors de sa prochaine visite (normal), mais ceci pose un gros problème si un autre client utilise le même ordinateur et donc se retrouve directement sur l’espace privé du premier client ! (pas très confidentiel)…Comment résoudre ce problème sans obliger bien sûr le premier client à se déconnecter manuellement après sa visite.Merci pour les informations et bonne soirée ! Link to comment Share on other sites More sharing options...
liandri Posted June 16, 2010 Share Posted June 16, 2010 Bonjour,Tu soulèves la tout simplement le problème d'utilisation privé dans des lieux publics.Pas de solution si ce n'est que de désactiver les cookies sur le navigateur du poste en question. (voir une configuration par site / domaine)A+ Link to comment Share on other sites More sharing options...
Panama Posted June 16, 2010 Author Share Posted June 16, 2010 Merci pour ta réponse,En fait, j’ai intégré Prestashop à mon site déjà existant et l’accès à cet « espace vente » se fait obligatoirement par un espace membre sécurisé, avec déconnexion manuelle et automatique au bout de quelques minutes, je pensais donc profiter de ce principe pour détruire automatiquement (ou lors d’une déconnexion manuelle) les cookies de connexion Prestashop, non ?Problème : Quels sont les cookies à détruire et surtouts comment en PHP…Merci pour les réponses@+ Link to comment Share on other sites More sharing options...
Cédric Posted June 16, 2010 Share Posted June 16, 2010 Salut,A priori un cookie prestashop dure 20 jours. ( 1728000 secondes )On trouve cette valeur dans le constructeur de la classe cookie dans /classes/Cokkie.php function __construct($name, $path = '', $expire = NULL) { $this->_content = array(); $this->_expire = isset($expire) ? intval($expire) : (time() + 1728000); // <-------- ici $this->_name = md5($name._COOKIE_KEY_); $this->_path = trim(__PS_BASE_URI__.$path, '/\\').'/'; if ($this->_path{0} != '/') $this->_path = '/'.$this->_path; $this->_path = rawurlencode($this->_path); $this->_path = str_replace('/', '/', $this->_path); $this->_path = str_replace('~', '~', $this->_path); $this->_key = _COOKIE_KEY_; $this->_iv = _COOKIE_IV_; $this->_domain = $this->getDomain(); $this->_bf = new Blowfish($this->_key, $this->_iv); $this->update(); } Ce que je propose d'une manière de facilité de remplacer ce code par: function __construct($name, $path = '', $expire = NULL) { $this->_content = array(); $this->_expire = isset($expire) ? intval($expire) : (time() + __PS_COOKY_TIME__); // <-------- ici $this->_name = md5($name._COOKIE_KEY_); $this->_path = trim(__PS_BASE_URI__.$path, '/\\').'/'; if ($this->_path{0} != '/') $this->_path = '/'.$this->_path; $this->_path = rawurlencode($this->_path); $this->_path = str_replace('/', '/', $this->_path); $this->_path = str_replace('~', '~', $this->_path); $this->_key = _COOKIE_KEY_; $this->_iv = _COOKIE_IV_; $this->_domain = $this->getDomain(); $this->_bf = new Blowfish($this->_key, $this->_iv); $this->update(); } __PS_COOKY_TIME__ est une constante que l'on va définir dans le fichier de config, dans /config/config.inc.php.En dessous de /* Improve PHP configuration to prevent issues */ @ini_set('display_errors', 'on'); @ini_set('memory_limit', '128M'); @ini_set('upload_max_filesize', '100M'); @ini_set('default_charset', 'utf-8'); ajouter: $cooky_heure = 12; define('__PS_COOKY_TIME__', $cooky_heure*3600); @++ Link to comment Share on other sites More sharing options...
Panama Posted June 17, 2010 Author Share Posted June 17, 2010 Bonsoir à tous et à toutes,Oui mais…… cette solution détruit effectivement le cookie 12 heures après l’ouverture de mon espace vente (prestashop), non ?Je cherche plus une solution qui le détruirait lors de la déconnexion de mes client de leur espace membre, donc un bout de script implanter à la fin de ma page « delogue.php »J’ai bien trouvé la fonction setcookie que je ne sais pas utiliser (pour l’instant…).Peut-être un truc comme ça => Détruire un cookie, en le vidant... <? setcookie("nom du cookie à détruire"); ?> Voila, en tout cas, merci pour cette réponse@+PS/ quel est le nom donner à ce cookie (prestashop) ? Link to comment Share on other sites More sharing options...
Cédric Posted June 17, 2010 Share Posted June 17, 2010 peut etre que ca suffirait :-) $cooky = new Cookie(); $cooky->mylogout(); ou mieux global $cookie; $cookie->mylogout(); Link to comment Share on other sites More sharing options...
Panama Posted June 18, 2010 Author Share Posted June 18, 2010 Bonjour Cédric,J’ai ajouté le code que tu m’as donné à la fin de ma page « delogue.php », désolé, mais ça ne fonctionne pas.Les cookies Prestashop sont toujours présents après la déconnexion de mon espace membre… Bonne jounée !@+J’ai testé avec les deux sources : <?php // Destruction des cookies global $cookie; $cookie->mylogout(); ?> ainsi que : <?php // Destruction des cookies $cooky = new Cookie(); $cooky->mylogout(); ?> Link to comment Share on other sites More sharing options...
Cédric Posted June 18, 2010 Share Posted June 18, 2010 Salut,J'ai relu ta problèmatique... en fait, ce n'est pas un problème Prestashop.Là, où c'est bizarre, c'est que à l'origine, Prestashop marche très bien pour la destruction de son cookie lors du logout.Je viens de voir qu'il existe aussi Cookie::logout();Mes questions:1) Charges-tu l'environnement Prestashop dans ta page logout.php ?2) Si tu initialises pas Presta comme il faut, il faut créer un cookie avec le paramètre 'ps'3) Essayer plutot logout() que mylogout() $cheminPresta = 'chemin de prestashop'; include($cheminPresta.'/config/config.inc.php'); include($cheminPresta.'/init.php'); $cooky = new Cookie('ps'); $cooky->logout(); @++ Link to comment Share on other sites More sharing options...
Panama Posted June 19, 2010 Author Share Posted June 19, 2010 Bonjour Cédric,Comme tu le dis, ce n’est absolument pas un problème Prestashop. La déconnexion via Prestashop marche effectivement très bien et détruit bien son propre cookie, mais je cherche une solution pour que cela marche aussi lors de la déconnexion de mon propre espace client.J’essaye juste de faire cohabiter au mieux Prestashop sur mon site existant.Sur ma boutique Prestashop, j’ai placé un lien qui ramène mes clients dans leur propre espace client, sur ce même espace client se trouve un bouton Déconnexion (qui revoit donc sur la page delogue .php) et c’est dans cette page que devrai se trouver la solution pour détruire le cookie Prestashop, enfin c’est comme ça que je le voyais... Je pense que l’on peut détruire un cookie avec un script placé dans n'importe quelle page de l’arborescence du site. Ma page delogue.php est placée dans un des dossiers de mon site et j’ai placé Prestashop dans un autre dossier bien à lui. Ma page delogue.php ne contient absolument rien venant de Prestashop. « Quand tu parles de ma page logout.php, tu veux sans doute parler de ma page delogue.php ? »Donc,Effectivement, l’environnement Prestashop n’est pas chargé dans ma page delogue.php(comment charger cet environnement ?)J’ai testé ton script que j’ai intégré dans ma page delogue.php, ça ne marche pas…Le paramètre ‘ps’ doit t’il être remplacé par quoi ? (paramètre ‘ps’ = un paramètre de Prestashop ?)Voici ce que j’ai fait : <?php // Destruction du cookie Prestashop $cheminPresta = '../espace_client'; include($cheminPresta.'/config/config.inc.php'); include($cheminPresta.'/init.php'); $cooky = new Cookie('ps'); $cooky->logout(); ?> @+ et encore merci pour ton aide Link to comment Share on other sites More sharing options...
Panama Posted June 19, 2010 Author Share Posted June 19, 2010 Reeeeeeee,Désolé… je me suis planté ! ce n’est pas « espace_client » dans la variable $cheminPresta mais « espace_vente » (c'est le nom du dossier ou ce trouve Prestashop...)Donc : <?php // Destruction du cookie Prestashop $cheminPresta = '../espace_vente'; include($cheminPresta.'/config/config.inc.php'); include($cheminPresta.'/init.php'); $cooky = new Cookie('ps'); $cooky->logout(); ?> Link to comment Share on other sites More sharing options...
Cédric Posted June 28, 2010 Share Posted June 28, 2010 Bon, j'ai trouvé la ligne qui fonctionne: echo "SetCookie: ".((setcookie("12a6f7304ace817d415ccc8e304f6b48", 0, time()-3600, '/', '.mondomaine.com'))?"ok":"nok")." "; biensur là, c'est pour tracer, il faut garder que le setcookie.il faut que tu remplaces la valeur "12a6f7304ace817d415ccc8e304f6b48" par la valeur correcte. C'est plutot aléatoire, je conseille de tout mettre dans une boucle et de tout supprimer: foreach($_COOKIE as $k=>$v) { setcookie($k, 0, time()-3600, '/', '.mondomaine.com'); } et de bien adapter le mondomaine.com et le chemin utilisé par ton cookie.(pour moi c'est '/') Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now