Jump to content

Edit History

kezako_12

kezako_12

Bonjour,

Je viens d'être confronté au problème de déconnexion du client avec la version 1.7 de Prestashop. Selon ce que j'ai pu lire sur le web, ce problème existe avec les versions antérieures.

Voici ce que j'ai pu observer :

La connexion d'un client est enregistrée dans un cookie qui est le cookie frontend. La durée de vie de ce cookie est paramétrable dans l'admin est il est réglé par défaut à 480 heures soit 20 jours.

Lorsqu'un client se connecte, il y a deux cas de figure :

cas n° 1 :  il possède déjà un compte et se connecte avec ses identifiants (qui sont conservés en cache dans son navigateur pendant 20 jours par défaut)

cas n° 2 : il ne possède pas de compte, il en créé un et il est connecté.

Etude des deux cas :

Cas n° 1 : si le client déjà inscrit se connecte à son compte pendant cette période  de 20 jours (ce qui signifie que ses identifiants sont en cache), la déconnexion ne fonctionnera pas, il sera obligé de vider le cache de son navigateur pour pouvoir se déconnecter (il parait difficile d'obliger le client à effectuer cette manipulation, cela ne fait pas très sérieux !... :wacko:)

Cas n°2 : si le client vient de créer son compte, à la fin de ses achats le lien de déconnexion fonctionnera normalement.

En revanche, si ce même client décide 10 minutes après, ou le lendemain de refaire un achat, la déconnexion ne fonctionnera pas tant que la période de 20 jours, à l'issue de laquelle les données en cache seront automatiquement effacées, ne sera pas passée. Et on se retrouve dans le cas n° 1 !...

Pourquoi ?

Plaçons nous dans le cas ou le client vient de créer son compte ou que c'est client qui a déjà un compte et qu'il se connecte avec ses identifiants après le délai de validité des cookies :

Le lien de déconnexion ressemble à quelque chose comme ceci :

<a href="https://www.maboutique.fr /?mylogout "> Déconnexion </a>

Lorsqu'il va cliquer sur ce lien, celui-ci sera placé dans le cache du navigateur (ceci est observable dans la console debug du navigateur – Chrome, Firefox, onglet Network).

 

image.thumb.png.b26bfd187b09b0bb64d72e84f752e7ff.png

 

Une fois en cache, ce lien ne fonctionne  plus et la déconnexion devient impossible tant que ce cache n'est pas vidé (manuellement ou automatiquement après la période de validité définie dans l'admin).

Il est possible également, de vérifier dans le navigateur que le cookie frontend n'est pas modifié après un clic sur le lien de déconnexion : vous y trouverez la même valeur que celle qui a été créée lors de la connexion.

Pour vous en convaincre, si vous êtes dans ce cas de figure, faites l'expérience suivante :

 

image.thumb.png.5422f39d91ddcb28dda94f47e75bc2a4.png

 

Dans la console de votre navigateur, onglet Network, cochez la case "Disable cache", et cliquez à nouveau sur "Déconnexion". Et là ? Miracle, la déconnexion fonctionne, non ?

Ce qui tendrait à prouver que l'on est face à un problème… de cache

(Attention cependant, cette manip ne fonctionne que lorsque la console de debug est active)

Pour ceux qui veulent en savoir plus, la méthode mylogout() est définie dans le fichier maboutique\classes\Customer.php et elle est appelée dans le fichier maboutique\classes\controller\FrontController.php.

Cette méthode ($this->context->customer->mylogout(); est appelée dans un bloc if, elle est suivie de l'instruction

Tools::redirect(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null);

Qui a pour but de rediriger le visiteur vers la page à partir de laquelle il a cliqué sur le lien "Déconnexion". Nous y reviendrons plus bas**…

Pour éviter ce problème de mise en cache, j'ai trouvé sur le net une solution qui consiste à "dire" au serveur de ne pas mettre en cache dans le navigateur certains types de fichier. Ces instructions sont à placer dans le fichier .htaccess à la racine du site :

<IfModule mod_headers.c>

<FilesMatch "\.(php)$">

            Header set Cache-Control "no-cache, no-store, must-revalidate"

            Header set Pragma "no-cache"

            Header set Expires 0

</FilesMatch>

</IfModule>

Tous les fichiers dont l'extension est php ne seront pas mis en cache. Cette astuce fonctionne mais elle est un peu "brute" car elle va toucher tous les fichiers php de votre site. J'ai donc creusé un peu plus pour tenter de trouver une solution plus "light".

**Revenons à l'instruction de redirection placée dans le maboutique\classes\controller\FrontController.php :

j'ai constaté que c'est cette instruction qui, lorsqu'elle est exécutée place la méthode mylogout() dans le cache du navigateur.

Il suffit de la placer en commentaire pour que le problème de déconnexion disparaisse définitivement sans créer de dysfonctionnement sur le site. Comme décrit plus haut, cette instruction a pour seul but de renvoyer le visiteur sur la page à partir de laquelle il a cliqué sur le lien de déconnexion. Sans elle, le visiteur sera simplement redirigé vers la page d'accueil, ce qui ne présente pas un inconvénient majeur.

Il est a noter que parmi toutes les méthodes qui concernent le compte client (mon-compte, connexion?back=my-account, mylogout()) seule la méthode mylogout() est mise en cache.

Pourquoi ? Mystère… Il faudrait creuser d'avantage pour tenter de comprendre, quant à moi, je n'ai pas poussé plus loin les investigations. Si cet article est lu par un développeur Prestashop, peut-être aurons-nous une explication…

Dernier point :

Confronté à ce problème sur un site hébergé, avant d'avoir trouvé la solution présentée ci-dessus, j'ai rapatrié ce site pour l'installer en local sur mon serveur EasyPhp. Il s'avère que ce problème n'existe pas sur serveur en local : la méthode mylogout() n'est jamais mise en cache…

Sans doute une piste à creuser ?...

J'espère avoir été assez clair dans mes explications. Si, de votre côté vous avez des informations qui pourraient compléter cet article, n'hésitez pas à publier !

https://www.fuzy-conceptweb.fr/

 

 

 

kezako_12

kezako_12

Bonjour,

Je viens d'être confronté au problème de déconnexion du client avec la version 1.7 de Prestashop. Selon ce que j'ai pu lire sur le web, ce problème existe avec les versions antérieures.

Voici ce que j'ai pu observer :

La connexion d'un client est enregistrée dans un cookie qui est le cookie frontend. La durée de vie de ce cookie est paramétrable dans l'admin est il est réglé par défaut à 480 heures soit 20 jours.

Lorsqu'un client se connecte, il y a deux cas de figure :

cas n° 1 :  il possède déjà un compte et se connecte avec ses identifiants (qui sont conservés en cache dans son navigateur pendant 20 jours par défaut)

cas n° 2 : il ne possède pas de compte, il en créé un et il est connecté.

Etude des deux cas :

Cas n° 1 : si le client déjà inscrit se connecte à son compte pendant cette période  de 20 jours (ce qui signifie que ses identifiants sont en cache), la déconnexion ne fonctionnera pas, il sera obligé de vider le cache de son navigateur pour pouvoir se déconnecter (il parait difficile d'obliger le client à effectuer cette manipulation, cela ne fait pas très sérieux !... :wacko:)

Cas n°2 : si le client vient de créer son compte, à la fin de ses achats le lien de déconnexion fonctionnera normalement.

En revanche, si ce même client décide 10 minutes après, ou le lendemain de refaire un achat, la déconnexion ne fonctionnera pas tant que la période de 20 jours, à l'issue de laquelle les données en cache seront automatiquement effacées, ne sera pas passée. Et on se retrouve dans le cas n° 1 !...

Pourquoi ?

Plaçons nous dans le cas ou le client vient de créer son compte ou que c'est client qui a déjà un compte et qu'il se connecte avec ses identifiants après le délai de validité des cookies :

Le lien de déconnexion ressemble à quelque chose comme ceci :

<a href="https://www.maboutique.fr /?mylogout "> Déconnexion </a>

Lorsqu'il va cliquer sur ce lien, celui-ci sera placé dans le cache du navigateur (ceci est observable dans la console debug du navigateur – Chrome, Firefox, onglet Network).

 

image.thumb.png.b26bfd187b09b0bb64d72e84f752e7ff.png

 

Une fois en cache, ce lien ne fonctionne  plus et la déconnexion devient impossible tant que ce cache n'est pas vidé (manuellement ou automatiquement après la période de validité définie dans l'admin).

Il est possible également, de vérifier dans le navigateur que le cookie frontend n'est pas modifié après un clic sur le lien de déconnexion : vous y trouverez la même valeur que celle qui a été créée lors de la connexion.

Pour vous en convaincre, si vous êtes dans ce cas de figure, faites l'expérience suivante :

 

image.thumb.png.5422f39d91ddcb28dda94f47e75bc2a4.png

 

Dans la console de votre navigateur, onglet Network, cochez la case "Disable cache", et cliquez à nouveau sur "Déconnexion". Et là ? Miracle, la déconnexion fonctionne, non ?

Ce qui tendrait à prouver que l'on est face à un problème… de cache

(Attention cependant, cette manip ne fonctionne que lorsque la console de debug est active)

Pour ceux qui veulent en savoir plus, la méthode mylogout() est définie dans le fichier maboutique\classes\Customer.php et elle est appelée dans le fichier maboutique\classes\controller\FrontController.php.

Cette méthode ($this->context->customer->mylogout(); est appelée dans un bloc if, elle est suivie de l'instruction

Tools::redirect(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null);

Qui a pour but de rediriger le visiteur vers la page à partir de laquelle il a cliqué sur le lien "Déconnexion". Nous y reviendrons plus bas**…

Pour éviter ce problème de mise en cache, j'ai trouvé sur le net une solution qui consiste à "dire" au serveur de ne pas mettre en cache dans le navigateur certains types de fichier. Ces instructions sont à placer dans le fichier .htaccess à la racine du site :

<IfModule mod_headers.c>

<FilesMatch "\.(php)$">

            Header set Cache-Control "no-cache, no-store, must-revalidate"

            Header set Pragma "no-cache"

            Header set Expires 0

</FilesMatch>

</IfModule>

Tous les fichiers dont l'extension est php ne seront pas mis en cache. Cette astuce fonctionne mais elle est un peu "brute" car elle va toucher tous les fichiers php de votre site. J'ai donc creusé un peu plus pour tenter de trouver une solution plus "light".

**Revenons à l'instruction de redirection placée dans le maboutique\classes\controller\FrontController.php :

j'ai constaté que c'est cette instruction qui, lorsqu'elle est exécutée place la méthode mylogout() dans le cache du navigateur.

Il suffit de la placer en commentaire pour que le problème de déconnexion disparaisse définitivement sans créer de dysfonctionnement sur le site. Comme décrit plus haut, cette instruction a pour seul but de renvoyer le visiteur sur la page à partir de laquelle il a cliqué sur le lien de déconnexion. Sans elle, le visiteur sera simplement redirigé vers la page d'accueil, ce qui ne présente pas un inconvénient majeur.

Il est a noter que parmi toutes les méthodes qui concernent le compte client (mon-compte, connexion?back=my-account, mylogout()) seule la méthode mylogout() est mise en cache.

Pourquoi ? Mystère… Il faudrait creuser d'avantage pour tenter de comprendre, quant à moi, je n'ai pas poussé plus loin les investigations. Si cet article est lu par un développeur Prestashop, peut-être aurons-nous une explication…

Dernier point :

Confronté à ce problème sur un site hébergé, avant d'avoir trouvé la solution présentée ci-dessus, j'ai rapatrié ce site pour l'installer en local sur mon serveur EasyPhp. Il s'avère que ce problème n'existe pas sur serveur en local : la méthode mylogout() n'est jamais mise en cache…

Sans doute une piste à creuser ?...

J'espère avoir été assez clair dans mes explications. Si, de votre côté vous avez des informations qui pourraient compléter cet article, n'hésitez pas à publier !

 

 

 

kezako_12

kezako_12

Bonjour,

Je viens d'être confronté au problème de déconnexion du client avec la version 1.7 de Prestashop. Selon ce que j'ai pu lire sur le web, ce problème existe avec les versions antérieures.

Voici ce que j'ai pu observer :

La connexion d'un client est enregistrée dans un cookie qui est le cookie frontend. La durée de vie de ce cookie est paramétrable dans l'admin est il est réglé par défaut à 480 heures soit 20 jours.

Lorsqu'un client se connecte, il y a deux cas de figure :

cas n° 1 :  il possède déjà un compte et se connecte avec ses identifiants (qui sont conservés en cache dans son navigateur pendant 20 jours par défaut)

cas n° 2 : il ne possède pas de compte, il en créé un et il est connecté.

Etude des deux cas :

Cas n° 1 : si le client déjà inscrit se connecte à son compte pendant cette période  de 20 jours (ce qui signifie que ses identifiants sont en cache), la déconnexion ne fonctionnera pas, il sera obligé de vider le cache de son navigateur pour pouvoir se déconnecter (il parait difficile d'obliger le client à effectuer cette manipulation, cela ne fait pas très sérieux !... :wacko:)

Cas n°2 : si le client vient de créer son compte, à la fin de ses achats le lien de déconnexion fonctionnera normalement.

En revanche, si ce même client décide 10 minutes après, ou le lendemain de refaire un achat, la déconnexion ne fonctionnera pas tant que la période de 20 jours, à l'issue de laquelle les données en cache seront automatiquement effacées, ne sera pas passée. Et on se retrouve dans le cas n° 1 !...

Pourquoi ?

Plaçons nous dans le cas ou le client vient de créer son compte ou que c'est client qui a déjà un compte et qu'il se connecte avec ses identifiants après le délai de validité des cookies :

Le lien de déconnexion ressemble à quelque chose comme ceci :

<a href="https://www.maboutique.fr /?mylogout "> Déconnexion </a>

Lorsqu'il va cliquer sur ce lien, celui-ci sera placé dans le cache du navigateur (ceci est observable dans la console debug du navigateur – Chrome, Firefox, onglet Network).

 

image.thumb.png.b26bfd187b09b0bb64d72e84f752e7ff.png

 

Une fois en cache, ce lien ne fonctionne  plus et la déconnexion devient impossible tant que ce cache n'est pas vidé (manuellement ou automatiquement après la période de validité définie dans l'admin).

Il est possible également, de vérifier dans le navigateur que le cookie frontend n'est pas modifié après un clic sur le lien de déconnexion : vous y trouverez la même valeur que celle qui a été créée lors de la connexion.

Pour vous en convaincre, si vous êtes dans ce cas de figure, faites l'expérience suivante :

 

image.thumb.png.5422f39d91ddcb28dda94f47e75bc2a4.png

 

Dans la console de votre navigateur, onglet Network, cochez la case "Disable cache", et cliquez à nouveau sur "Déconnexion". Et là ? Miracle, la déconnexion fonctionne, non ?

Ce qui tendrait à prouver que l'on est face à un problème… de cache

(Attention cependant, cette manip ne fonctionne que lorsque la console de debug est active)

Pour ceux qui veulent en savoir plus, la méthode mylogout() est définie dans le fichier maboutique\classes\Customer.php et elle est appelée dans le fichier maboutique\classes\controller\FrontController.php.

Cette méthode ($this->context->customer->mylogout(); est appelée dans un bloc if, elle est suivie de l'instruction

Tools::redirect(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null);

Qui a pour but de rediriger le visiteur vers la page à partir de laquelle il a cliqué sur le lien "Déconnexion". Nous y reviendrons plus bas**…

Pour éviter ce problème de mise en cache, j'ai trouvé sur le net une solution qui consiste à "dire" au serveur de ne pas mettre en cache dans le navigateur certains types de fichier. Ces instructions sont à placer dans le fichier .htaccess à la racine du site :

<IfModule mod_headers.c>

<FilesMatch "\.(php)$">

            Header set Cache-Control "no-cache, no-store, must-revalidate"

            Header set Pragma "no-cache"

            Header set Expires 0

</FilesMatch>

</IfModule>

Tous les fichiers dont l'extension est php ne seront pas mis en cache. Cette astuce fonctionne mais elle est un peu "brute" car elle va toucher tous les fichiers php de votre site. J'ai donc creusé un peu plus pour tenter de trouver une solution plus "light".

**Revenons à l'instruction de redirection placée dans le maboutique\classes\controller\FrontController.php :

j'ai constaté que c'est cette instruction qui, lorsqu'elle est exécutée place la méthode mylogout() dans le cache du navigateur.

Il suffit de la placer en commentaire pour que le problème de déconnexion disparaisse définitivement sans créer de dysfonctionnement sur le site. Comme décrit plus haut, cette instruction a pour seul but de renvoyer le visiteur sur la page à partir de laquelle il a cliqué sur le lien de déconnexion. Sans elle, le visiteur sera simplement redirigé vers la page d'accueil, ce qui ne présente pas un inconvénient majeur.

Il est a noter que parmi toutes les méthodes qui concernent le compte client (mon-compte, connexion?back=my-account, mylogout()) seule la méthode mylogout() est mise en cache.

Pourquoi ? Mystère… Il faudrait creuser d'avantage pour tenter de comprendre, quant à moi, je n'ai pas poussé plus loin les investigations. Si cet article est lu par un développeur Prestashop, peut-être aurons-nous une explication…

Dernier point :

Confronté à ce problème sur un site hébergé, avant d'avoir trouvé la solution présentée ci-dessus, j'ai rapatrié ce site pour l'installer en local sur mon serveur EasyPhp. Il s'avère que ce problème n'existe pas sur serveur en local : la méthode mylogout() n'est jamais mise en cache…

Sans doute une piste à creuser ?...

J'espère avoir été assez clair dans mes explications. Si, de votre côté vous avez des informations qui pourraient compléter cet article, n'hésitez pas à publier !

 

 

 

kezako_12

kezako_12

Bonjour,

Je viens d'être confronté au problème de déconnexion du client avec la version 1.7 de Prestashop. Selon ce que j'ai pu lire sur le web, ce problème existe avec les versions antérieures.

Voici ce que j'ai pu observer :

La connexion d'un client est enregistrée dans un cookie qui est le cookie frontend. La durée de vie de ce cookie est paramétrable dans l'admin est il est réglé par défaut à 480 heures soit 20 jours.

Lorsqu'un client se connecte, il y a deux cas de figure :

cas n° 1 :  il possède déjà un compte et se connecte avec ses identifiants (qui sont conservés en cache dans son navigateur pendant 20 jours par défaut)

cas n° 2 : il ne possède pas de compte, il en créé un et il est connecté.

Etude des deux cas :

Cas n° 1 : si le client déjà inscrit se connecte à son compte pendant cette période  de 20 jours (ce qui signifie que ses identifiants sont en cache), la déconnexion ne fonctionnera pas, il sera obligé de vider le cache de son navigateur pour pouvoir se déconnecter (il parait difficile d'obliger le client à effectuer cette manipulation, cela ne fait pas très sérieux !... :wacko:)

Cas n°2 : si le client vient de créer son compte, à la fin de ses achats le lien de déconnexion fonctionnera normalement.

En revanche, si ce même client décide 10 minutes après, ou le lendemain de refaire un achat, la déconnexion ne fonctionnera pas tant que la période de 20 jours, à l'issue de laquelle les données en cache seront automatiquement effacées, ne sera pas passée. Et on se retrouve dans le cas n° 1 !...

Pourquoi ?

Plaçons nous dans le cas ou le client vient de créer son compte ou que c'est client qui a déjà un compte et qu'il se connecte avec ses identifiants après le délai de validité des cookies :

Le lien de déconnexion ressemble à quelque chose comme ceci :

<a href="https://www.maboutique.fr /?mylogout "> Déconnexion </a>

Lorsqu'il va cliquer sur ce lien, celui-ci sera placé dans le cache du navigateur (ceci est observable dans la console debug du navigateur – Chrome, Firefox, onglet Network).

 

image.thumb.png.b26bfd187b09b0bb64d72e84f752e7ff.png

 

Une fois en cache, ce lien ne fonctionne  plus et la déconnexion devient impossible tant que ce cache n'est pas vidé (manuellement ou automatiquement après la période de validité définie dans l'admin).

Il est possible également, de vérifier dans le navigateur que le cookie frontend n'est pas modifié après un clic sur le lien de déconnexion : vous y trouverez la même valeur que celle qui a été créée lors de la connexion.

Pour vous en convaincre, si vous êtes dans ce cas de figure, faites l'expérience suivante :

image.thumb.png.5422f39d91ddcb28dda94f47e75bc2a4.png

Dans la console de votre navigateur, onglet Network, cochez la case "Disable cache", et cliquez à nouveau sur "Déconnexion". Et là ? Miracle, la déconnexion fonctionne, non ?

Ce qui tendrait à prouver que l'on est face à un problème… de cache

(Attention cependant, cette manip ne fonctionne que lorsque la console de debug est active)

Pour ceux qui veulent en savoir plus, la méthode mylogout() est définie dans le fichier maboutique\classes\Customer.php et elle est appelée dans le fichier maboutique\classes\controller\FrontController.php.

Cette méthode ($this->context->customer->mylogout(); est appelée dans un bloc if, elle est suivie de l'instruction

Tools::redirect(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null);

Qui a pour but de rediriger le visiteur vers la page à partir de laquelle il a cliqué sur le lien "Déconnexion". Nous y reviendrons plus bas**…

Pour éviter ce problème de mise en cache, j'ai trouvé sur le net une solution qui consiste à "dire" au serveur de ne pas mettre en cache dans le navigateur certains types de fichier. Ces instructions sont à placer dans le fichier .htaccess à la racine du site :

<IfModule mod_headers.c>

<FilesMatch "\.(php)$">

            Header set Cache-Control "no-cache, no-store, must-revalidate"

            Header set Pragma "no-cache"

            Header set Expires 0

</FilesMatch>

</IfModule>

Tous les fichiers dont l'extension est php ne seront pas mis en cache. Cette astuce fonctionne mais elle est un peu "brute" car elle va toucher tous les fichiers php de votre site. J'ai donc creusé un peu plus pour tenter de trouver une solution plus "light".

**Revenons à l'instruction de redirection placée dans le maboutique\classes\controller\FrontController.php :

j'ai constaté que c'est cette instruction qui, lorsqu'elle est exécutée place la méthode mylogout() dans le cache du navigateur.

Il suffit de la placer en commentaire pour que le problème de déconnexion disparaisse définitivement sans créer de dysfonctionnement sur le site. Comme décrit plus haut, cette instruction a pour seul but de renvoyer le visiteur sur la page à partir de laquelle il a cliqué sur le lien de déconnexion. Sans elle, le visiteur sera simplement redirigé vers la page d'accueil, ce qui ne présente pas un inconvénient majeur.

Il est a noter que parmi toutes les méthodes qui concernent le compte client (mon-compte, connexion?back=my-account, mylogout()) seule la méthode mylogout() est mise en cache.

Pourquoi ? Mystère… Il faudrait creuser d'avantage pour tenter de comprendre, quant à moi, je n'ai pas poussé plus loin les investigations. Si cet article est lu par un développeur Prestashop, peut-être aurons-nous une explication…

Dernier point :

Confronté à ce problème sur un site hébergé, avant d'avoir trouvé la solution présentée ci-dessus, j'ai rapatrié ce site pour l'installer en local sur mon serveur EasyPhp. Il s'avère que ce problème n'existe pas sur serveur en local : la méthode mylogout() n'est jamais mise en cache…

Sans doute une piste à creuser ?...

J'espère avoir été assez clair dans mes explications. Si, de votre côté vous avez des informations qui pourraient compléter cet article, n'hésitez pas à publier !

 

 

 

kezako_12

kezako_12

Bonjour,

Je viens d'être confronté au problème de déconnexion du client avec la version 1.7 de Prestashop. Selon ce que j'ai pu lire sur le web, ce problème existe avec les versions antérieures.

Voici ce que j'ai pu observer :

La connexion d'un client est enregistrée dans un cookie qui est le cookie frontend. La durée de vie de ce cookie est paramétrable dans l'admin est il est réglé par défaut à 480 heures soit 20 jours.

Lorsqu'un client se connecte, il y a deux cas de figure :

cas n° 1 :  il possède déjà un compte et se connecte avec ses identifiants (qui sont conservés en cache dans son navigateur pendant 20 jours par défaut)

cas n° 2 : il ne possède pas de compte, il en créé un et il est connecté.

Etude des deux cas :

Cas n° 1 : si le client déjà inscrit se connecte à son compte pendant cette période  de 20 jours (ce qui signifie que ses identifiants sont en cache), la déconnexion ne fonctionnera pas, il sera obligé de vider le cache de son navigateur pour pouvoir se déconnecter (il parait difficile d'obliger le client à effectuer cette manipulation, cela ne fait pas très sérieux !... :wacko:)

Cas n°2 : si le client vient de créer son compte, à la fin de ses achats le lien de déconnexion fonctionnera normalement.

En revanche, si ce même client décide 10 minutes après, ou le lendemain de refaire un achat, la déconnexion ne fonctionnera pas tant que la période de 20 jours, à l'issue de laquelle les données en cache seront automatiquement effacées, ne sera pas passée. Et on se retrouve dans le cas n° 1 !...

Pourquoi ?

Plaçons nous dans le cas ou le client vient de créer son compte ou que c'est client qui a déjà un compte et qu'il se connecte avec ses identifiants après le délai de validité des cookies :

Le lien de déconnexion ressemble à quelque chose comme ceci :

<a href="https://www.maboutique.fr /?mylogout "> Déconnexion </a>

Lorsqu'il va cliquer sur ce lien, celui-ci sera placé dans le cache du navigateur (ceci est observable dans la console debug du navigateur – Chrome, Firefox, onglet Network).

 

 

Une fois en cache, ce lien ne fonctionne  plus et la déconnexion devient impossible tant que ce cache n'est pas vidé (manuellement ou automatiquement après la période de validité définie dans l'admin).

Il est possible également, de vérifier dans le navigateur que le cookie frontend n'est pas modifié après un clic sur le lien de déconnexion : vous y trouverez la même valeur que celle qui a été créée lors de la connexion.

Pour vous en convaincre, si vous êtes dans ce cas de figure, faites l'expérience suivante :

Dans la console de votre navigateur, onglet Network, cochez la case "Disable cache", et cliquez à nouveau sur "Déconnexion". Et là ? Miracle, la déconnexion fonctionne, non ?

Ce qui tendrait à prouver que l'on est face à un problème… de cache

(Attention cependant, cette manip ne fonctionne que lorsque la console de debug est active)

Pour ceux qui veulent en savoir plus, la méthode mylogout() est définie dans le fichier maboutique\classes\Customer.php et elle est appelée dans le fichier maboutique\classes\controller\FrontController.php.

Cette méthode ($this->context->customer->mylogout(); est appelée dans un bloc if, elle est suivie de l'instruction

Tools::redirect(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null);

Qui a pour but de rediriger le visiteur vers la page à partir de laquelle il a cliqué sur le lien "Déconnexion". Nous y reviendrons plus bas**…

Pour éviter ce problème de mise en cache, j'ai trouvé sur le net une solution qui consiste à "dire" au serveur de ne pas mettre en cache dans le navigateur certains types de fichier. Ces instructions sont à placer dans le fichier .htaccess à la racine du site :

<IfModule mod_headers.c>

<FilesMatch "\.(php)$">

            Header set Cache-Control "no-cache, no-store, must-revalidate"

            Header set Pragma "no-cache"

            Header set Expires 0

</FilesMatch>

</IfModule>

Tous les fichiers dont l'extension est php ne seront pas mis en cache. Cette astuce fonctionne mais elle est un peu "brute" car elle va toucher tous les fichiers php de votre site. J'ai donc creusé un peu plus pour tenter de trouver une solution plus "light".

**Revenons à l'instruction de redirection placée dans le maboutique\classes\controller\FrontController.php :

j'ai constaté que c'est cette instruction qui, lorsqu'elle est exécutée place la méthode mylogout() dans le cache du navigateur.

Il suffit de la placer en commentaire pour que le problème de déconnexion disparaisse définitivement sans créer de dysfonctionnement sur le site. Comme décrit plus haut, cette instruction a pour seul but de renvoyer le visiteur sur la page à partir de laquelle il a cliqué sur le lien de déconnexion. Sans elle, le visiteur sera simplement redirigé vers la page d'accueil, ce qui ne présente pas un inconvénient majeur.

Il est a noter que parmi toutes les méthodes qui concernent le compte client (mon-compte, connexion?back=my-account, mylogout()) seule la méthode mylogout() est mise en cache.

Pourquoi ? Mystère… Il faudrait creuser d'avantage pour tenter de comprendre, quant à moi, je n'ai pas poussé plus loin les investigations. Si cet article est lu par un développeur Prestashop, peut-être aurons-nous une explication…

Dernier point :

Confronté à ce problème sur un site hébergé, avant d'avoir trouvé la solution présentée ci-dessus, j'ai rapatrié ce site pour l'installer en local sur mon serveur EasyPhp. Il s'avère que ce problème n'existe pas sur serveur en local : la méthode mylogout() n'est jamais mise en cache…

Sans doute une piste à creuser ?...

J'espère avoir été assez clair dans mes explications. Si, de votre côté vous avez des informations qui pourraient compléter cet article, n'hésitez pas à publier !

 

 

 

×
×
  • Create New...