« Stavimednes.cz aneb nakupujeme v Prestashopu na délkuHromadné úpravy produktů v Prestashop 1.5 - modul QuickUpdate »

Problémy s prestashop cookies - přihlá?ení zákazníka a ko?ík nejsou funkční

08/27/13 | by Václav Mach [mail] | Categories: Bugy

Problém se příle?itostně objevuje po upgrade eshopu, případně přechodu na Prestashop z jiného systému. Obvyklé příznaky:

- dříve registrovaní zákazníci se nemohou přihlásit

- zbo?í přidané do ko?íku záhadně mizí

- často se děje jen na Google Chrome a/ nebo IE

 

Na toto téma jsou dohledatelná relevantní vlákna na prestashop foru, která vesměs ústí v doporučení "sma?te cookies" případně  "přesměrujte doménu na jiný tvar. 

 

Problém je způsobený chováním cookies - cookie nastavená pro doménu bez subdomény (tj. pro tvar mojedomena.cz) je rozpoznána i na subdoménách (tedy např. na www.mojedomena.cz) a zmate prohlí?eč.  Domníval jsem se ?e toto mů?e vzniknout jen pokud byl obchod dříve provozován na doméně bez www a po upgradu pře?el na tvar s www, ale není to tak. Minimálně v prestashop 1.5.2 a pravděpodobně i v dal?ích je chyba která věc dost komplikuje:

  • v administraci  prestashopu je nastavena doména obchodu www.mojedomena.cz
  • zákazník si zadá tvar bez www
  • eshop jej na pozadí přesměruje na tvar s www ale mezitím mu stačí nastavit "chybnou" cookie pro tvar bez www

Přesvědčil jsem se o tom na vlastní oči sledováním cookies v Chrome.  Ruční odstranění cookie pro tvar bez www okam?itě zfunkčnilo jak registraci tak ko?ík.

 

Ře?ení

je potřeba o?etřit 2 odli?né problémy

a) zabránit nastavení chybné cookie. K tomu je nutné aby k přesměrování do?lo dříve ne? to udělá eshop. Ře?ením je dopsat 2 řádky do souboru .htaccess který najdete v rootu svého eshopu, hned za RewriteEngine on:

RewriteCond %{HTTP_HOST} ^mojedomena.cz
RewriteRule (.*) http://www.mojedomena.cz/$1 [R=301,L]

webový server pak po?adavky přesměruje je?tě dříve ne? se k nim dostane engine presty

b) postarat se o u?ivatele kteří ji? chybnou cookie mají. To je trochu komplikované tím ?e prestashop si cookie ?ifruje. Jméno cookie je na?těstí ?ifrováno poměrně jednodu?e a hlavně pro v?echny u?ivatele stejně. Zjistit se dá např. v Chrome - otevřte si eshop na doméně bez www (pochopitelně předtím ne? jste provedli úpravy v .htaccess, nevadí ale  pokud Vás při tom přesměruje presta na tvar s www ). Pak v Chrome - ikonka v pravém rohu - Nastavení .... dole Zobrazit roz?ířená nastavení .... Ochrana soukromí .... Nastavení obsahu ... V?echny soubory cookie a data z webu

v okně které se otevře je v pravo nahoře vyhledávací pole do kterého zadejte prvních několik písmen ze jména domény (bez www). Měly by se zobrazit cookie jak pro doménu s www tak bez www, zajímá Vás cookie pro doménu bez www. Její jméno bude nějaký nepříli? hezký očividně nesmyslný řetězec - a právě ten je potřeba okopírovat. Pak u? stačí vytvořit soubor FrontController.php:

<?php

class FrontController extends FrontControllerCore
{
public function init()
    {
     
        global $useSSL, $cookie, $smarty, $cart, $iso, $defaultCountry, $protocol_link, $protocol_content, $link, $css_files, $js_files, $currency;
     
          if(isset($_COOKIE['9963c4e1fb4770546fb795abf44b4b34'])) {
        $time=mktime()-86400;
        setcookie('9963c4e1fb4770546fb795abf44b4b34', '', $time, '/', 'mojedomena.cz', 0, true);
         }
    
      parent::init();
     
    }
}

- vytvořte soubor v čistém textovém editoru jako je např.  pspad

- místo mojedomena.cz napi?te jméno Va?í domény bez www

- místo "9963c4e1fb4770546fb795abf44b4b34" pou?ijte nalezené jméno cookie

- hotový soubor nakopírujte do adresáře /override/classes/controller pod jménem FrontController.php

- pravděpodobně bude potřeba smazat soubor /cache/class_index.php

- pokud se při přidání zbo?í do ko?íku objeví zpráva "text status parse error" nebo web vůbec nefunguje  odstraňte z upraveného FrontController  v?echny mezery  za poslední závorkou a přesvěčte se ?e pou?íváte skutečně čistý textový editor, který si nepřidává ?ádné řídící znaky

 

Summary: Cookies, customer login and cart problems in Prestashop:

if the shop domain is www.mydomain.com, the problem is most likely caused by cookie set for the domain mydomain.com (not containing www)

- redirect to the www.mydomain.com already in .htaccess, this prevents prestashop from accidentally setting the wrong "no www" cookie

- find out the encrypted "no www" cookie name using Chrome browser

- use the name to delete the unvanted cookie in the overriden FrontController class (this help customers with the browser already "infected" by the wrong cookie

 

 



Permalink
Prestashop je eshopové open source ře?ení které a vytlačuji ostatní platformy včetně komerčních. Za svou úspě?nost vděčí zejména maximálnímu zaměření na podporu prodeje, vynikající roz?iřitelnosti v podobě stovek modulů a minimálním nárokům na provoz. Zdarma je nejen Prestashop, ale i řada modulů, cca 120 z nich je přibaleno ji? k základní instalaci.

Contents

XML Feeds

b2