Sunday 1 May 2016

Ukladanie OpenCart Sessions do Azure Redis-u

Keď sme zmigrovali náš eshop na novú architektúru nastalo veľa problémov. Väčšinu mal na rováši bývalý programátor, ktorý písal kód veľmi sebecky a celý systém prekopal tak, že nebolo možné ho použiť v inej architektúre než tej jeho. Avšak bola pomalá, drahá...


Rozhodli sme sa teda pre switchnutie na novú architektúru a potrebovali sme stávajúci eshop spraviť absolútne bezstavový, keďže nové architektúra mala viacero aplikačných serverov.

Obrázky sme zmigrovali na CDN spolu so statickými zdrojmi (css,js, atď...). Log súbory sme uložili na storage server a zostával posledný problém. Používateľské Sessions.

Tieto Sessions sa ukladali do filesystemu a OpenCart ako taký je neskutočne retardovaná platforma (základ pre veľký eshop - o tom ďalší blog).

Klasické nastavenie

session.save_handler = redis
session.save_path = "tcp://xzy.redis.cache.windows.net:6379?auth=SuperSecureKey&database=1"
;

nefungovalo.

Po niekoľkých hodinách som teda konečne prišiel na riešenie.

Ako prvé je potrebné stiahnúť PREDIS knižnicu pre PHP. Keďže OpenCart nepozná také veci ako composer, treba to spraviť manuálne.

Obsah priečinka "src" je potrebné skopírovať do priečinka "system/library/predis" (treba ho vytvoriť)

Ďalej treba vytvoriť nový handler pre Session:



Tento handler tiež vložíme do "system/library/RedisSessionHandler.php"

Ďalej je potrebné upraviť "system/library/session.php", tak aby začala používať tento nový handler. Konkrétne sa zameriame na konštruktor triedy Session.

Najskôr samozrejme includneme požadovanú knižnicu, konkrétne Autoload a náš nový handler.



A potom už len samotný konštruktor



HOTOVO! Session sa po novom ukladá do Redisu. :)