Montag, 15 Juli 2019 16:10

1001 verwaiste Warenkörbe ODER Hilfe, ich kann mich nicht mehr anmelden!

geschrieben von
Artikel bewerten
(1 Stimme)

Wer kennt das Problem nicht? Ich rufe das Back Office auf und kann mich auf einmal nicht mehr anmelden. Oder: Ein Kunde sieht alle Kategorien und Artikel, meldet sich an - und plötzlich ist dort, wo eben noch die Artikel waren, ein leerer Bildschirm, nur noch verrziert durch Header und Hintergrund (falls vorhanden). Die alten Hasen wissen inzwischen: Da sollte man als erstes den Cache löschen, vor allem auch den Browser-Cache. Ja, und dann wären da noch zig verwaiste Warenkörbe, manchmal Hunderte am Tag. Vielleicht hängt das Ganze ja zusammen ...

Obwohl das Problem uns seit PrestaShop 1.5 begleitet, scheinen die Entwicklerteams der letzten Jahre so etwas nicht für einen "kritischen Fehler" gehalten zu haben. Und nur solche haben anscheinend die Chance, irgendwann behoben zu werden. Ganz besonders virulent scheinen solche Fehler auch beim neuen PrestaShop 1.7 zu sein, zumindest lassen die vielen verzweifelten Anfragen im PrestaShop-Forum so etwas vermuten. Denn irgendwie läuft das alles auf einen Cache-Fehler hinaus.

Oder vielleicht doch nur irgendwie?

Den entscheidenden Hinweis hat, wie ich finde, ein User im PrestaShop-Forum schon vor über drei Jahren gegeben: "The problem is that prestashop creates cookies for www and non www domain." Und ein anderer User - ja, das gab es damals noch im PrestaShop-Forum! - hat daraufhin etwas später eine Lösung präsentiert, indem er die Funktion __construct in der /classes/Cookie.php erweiterte:

public function __construct($name, $path = '', $expire = null, $shared_urls = null, $standalone = false, $secure = false)
    {
        $this->_content = array();
        $this->_standalone = $standalone;
        $this->_expire = is_null($expire) ? time() + 1728000 : (int)$expire;
        $this->_path = trim(($this->_standalone ? '' : Context::getContext()->shop->physical_uri).$path, '/\\').'/';
        if ($this->_path{0} != '/') {
            $this->_path = '/'.$this->_path;
        }
        $this->_path = rawurlencode($this->_path);
        $this->_path = str_replace('%2F', '/', $this->_path);
        $this->_path = str_replace('%7E', '~', $this->_path);
        $this->_domain = $this->getDomain($shared_urls);

        //remove www from url > example: .domain.com
        $this->_domain =str_replace('www','', $this->_domain);

        //Change cookie name "PrestaShop" > "MyCookieName"
        $this->_name = 'MyCookieName-'.md5(($this->_standalone ? '' : _PS_VERSION_).$name.$this->_domain);

        $this->_allow_writing = true;
        $this->_salt = $this->_standalone ? str_pad('', 8, md5('ps'.__FILE__)) : _COOKIE_IV_;
        if ($this->_standalone) {
            $this->_cipherTool = new Blowfish(str_pad('', 56, md5('ps'.__FILE__)), str_pad('', 56, md5('iv'.__FILE__)));
        } elseif (!Configuration::get('PS_CIPHER_ALGORITHM') || !defined('_RIJNDAEL_KEY_')) {
            $this->_cipherTool = new Blowfish(_COOKIE_KEY_, _COOKIE_IV_);
        } else {
            $this->_cipherTool = new Rijndael(_RIJNDAEL_KEY_, _RIJNDAEL_IV_);
        }
        $this->_secure = (bool)$secure;

        $this->update();
    }

Der angenehme Nebeneffekt dieser Maßnahme ist: Von heute auf morgen verschwinden die vielen verwaisten Warenkörbe auf Nimmerwiedersehen.

Da dieser Teil PrestaShops mehr seit der Version 1.5 nicht mehr überarbeitet wurde, ist es das einfachste, daraus ein kleines Override zu machen und dies in das Verzeichnis /overrides/classes/Cookie.php einzuspielen. Anschließend einmal unter

  • Erweiterte Einstellungen --> Leistung den Cache löschen oder
  • im Back Office einmal STRG+F5 drücken oder
  • per FTP die Datei /cache/class_index.php löschen (letztere enthält die Dateiverweise auf Original oder Override-Dateien und wird bei jedem Programmstart neu erzeugt).

Und das Problem ist fürs Erste gelöst!

Ich habe der Einfachheit halber die benötigten Overrides für 1.5 bis 1.7  als Zip-Datei zum Download angehängt. In 1.7 sieht die Funktion nur deshalb etwas anders aus, weil es dort die Klasse Rijndael.php nicht mehr gibt.

 

EDIT: Da sich in das Override für 1.5/16 ein kleiner Fehler eingeschlichen hatte, habe ich die ZIP-Datei am 18.07.2019, 19:00 Uhr geändert.

 

 

 

Gelesen 4484 mal Letzte Änderung am Donnerstag, 18 Juli 2019 17:31

1 Kommentar

  • Kommentar-Link eleazar Donnerstag, 18 Juli 2019 17:14 gepostet von eleazar

    Die bis 18.07.2019, 19:00 Uhr, downloadbare Zip-Datei enthielt einen kleinen Fehler im Override für 1.5/1.6. Der ist nun behoben.

Schreibe einen Kommentar

Bitte achten Sie darauf, alle Felder mit einem Stern (*) auszufüllen. HTML-Code ist nicht erlaubt.

Neueste Beiträge

K2 User

uddeIM Mailbox

Sie sind nicht eingeloggt.