Uurides WooCommerce Sessioni andmeid

WordPressis on väga palju viise, kuidas WC Sessioni andmeid kätte saada. Hiljuti seisin silmitsi probleemiga, kus mul oli vaja analüüsida WC Sessioni andmeid võimalikult vähedestruktiivsel moel live-keskkonnas. Tüüpiliselt toimuvad kõik sellised tegevused kas arenduskeskkondades või staging’us, aga kuna seda probleemi ei olnud võimalik mujal taastoota, siis esmaseks analüüsiks kasutasin live-keskkonda.

Selleks, et WC Sessioni andmeid kätte saada, on mitu viisi.

Näiteks saab kasutada WordPressi enda error log’i – eeldusel, et WP_DEBUG ja WP_DEBUG_LOG on aktiivsed:

if (defined('WP_DEBUG') && WP_DEBUG) {
    $session_data = WC()->session->get_data();
    error_log('WooCommerce Session Data: ' . print_r($session_data, true));
}

Kasutades WooCommerce’i error log’i:

$logger = wc_get_logger();
$session_data = WC()->session->get_data();
$logger->info('WooCommerce Session Data:', $session_data);

Või printides selle peidetud div-ina lehel:

<?php $session_data = WC()->session->get_data(); ?>
<div style="display: none;">
    <pre><?php print_r($session_data); ?></pre>
</div>

Küll aga tuleb arvestada sellega, et olenevalt live-keskkonna liiklustihedusest võivad error log’id kiiresti täituda ja üldiselt tasub live’is muudatuste tegemist vältida.

Kuidas WC Sessioni andmed ilma lehte muutmata kätte saada?

Lihtne vastus on: andmebaasist. Selleks, et neid sealt kätte saada, peame natuke teadma, kuidas WordPress ja WooCommerce oma sessiooni andmeid haldavad. Kõige lihtsam on alustada küsimusest, kuidas WooCommerce ise neid andmeid loeb.

Kuidas loeb WC Session andmebaasist andmeid?

WordPress salvestab oma sessiooni andmed kasutaja küpsistesse. WooCommerce aga kasutab nii küpsiseid kui ka andmebaasi. Reaalsed andmed asuvad andmebaasis, küpsist kasutatakse kasutaja sidumiseks andmetega. Selleks, et mul oleks võimalik saada kätte sessiooni andmed, on mul esmalt vaja kätte saada kasutaja küpsis, et selle järgi andmebaasist vajalikud andmed üles otsida.

Leiame WP_WOOCOMMERCE_SESSION küpsise

Kõigepealt on vaja kätte saada külastaja sessiooni ID.

Selleks, et sessiooni ID kätte saada, tuleb külastada veebilehte, mille andmeid on vaja analüüsida. Avalda Developer console ning otsi välja Cookie osa. Sealt leiad Cookie nimega wp_woocommerce_session_###
Kui seda küpsist veel paigas ei ole, pole seda järelikult ka loodud. Tavaliselt luuakse see esimese toote ostukorvi lisamisega.


Minu sessiooni puhul on küpsise väärtus järgmine:
t_9074f44d173cf2b09e3bf0f13c42be%7C%7C1695290548%7C%7C1695286948%7C%7Ccc0474d0519c721a98eafa404da9c98f

Vajan sellest vaid esimest osa, st kuni esimese %-märgini:
t_9074f44d173cf2b09e3bf0f13c42be

Kiiremini, kõrgemale, kaugemale ja andmebaasi

Pärast sessiooni ID kättesaamist tuleb ülejäänud infole ligipääsemiseks edasi andmebaasi liikuda. Selleks lähme PhpMyAdmini (aga põhimõtteliselt sobib ükskõik milline andmebaasi haldusliides). Näiteks Zone‘is käib see nii:
Veebimajutus->Andmebaasid->PhpMyAdmin.

Hea meelde jätta: kasutajanime ja parooli leiame serverist wp-config.php failist.

Edasi otsin üles wp_woocommerce_sessions tabeli. Üldjuhul näeb see välja umbes selline:

Hea meelde jätta – kasutajanime ja parooli leiame serverist wp-config.php failist.

Edasi otsin üles wp_woocommerce_sessions tabeli. Üldjuhul näeb see välja umbes selline:

Nüüd on vaja kätte saada minu sessiooni ID-ga read ja kõige lihtsam moodus on muuta olemasolevat SQL päringut. Selleks vajutame nuppu “Muuda kohapeal”.

Olemasolev päring SELECT * FROM ‘wp_woocommerce_sessions’ tuleb muuta nii, et ma leiaksin andmebaasist ainult oma eelnevalt kopeeritud sessiooni key järgi tulemuse. Minu puhul näeb see välja järgmiselt:
SELECT * FROM ‘wp_woocommerce_sessions’ where session_key = “t_9074f44d173cf2b09e3bf0f13c42be”

Olemas!

Eksport

Selleks kasutan PhpMyAdmini export funktsiooni. Nüüd tuleb valida rida, mida eksportida soovid, ja valida “Ekspordi”.

See avab uue ekspordi vaate, kus põhimõtteliselt midagi muutma ei pea. Isiklikult eelistan ekspordi formaadina hetkel PHP array’d, sest pean seda kõige kasutajasõbralikumaks.. Kuna meid huvitav info on niikuinii serialiseeritud, siis peab olema valmis keerulisemaks lugemiseks.

Vajutades “ekspordi”, salvestatakse see rida arvutisse ekspordifailina. Nüüd sisaldab see kogu WC_Sessioni andmeid.

Snapshot’id hetkest

Sedapidi andmete ekspordi eelis on, et ühte rida saab lõputu arv kordi eksportida. Iga kord, kui andmeid uuesti eksportida on vaja, tuleb lehel lihtsalt uuesti “eksport” vajutada. Uuesti rida valima või lehte uuendama ei pea. Ühtlasi tähendab see, et hilisemaks analüüsiks on olemas eraldi failid eri ajahetkedest. See on väga kasulik, kui on vaja võrrelda sessiooni andmeid eri faasides, näiteks enne toote korvi lisamist, pärast korvi lisamist vms.


Lõpetuseks

Sel moel WC_Sessioni andmete kättesaamine ei pruugi iga kord kõige optimaalsemaks osutuda. Eelis on see, et nii ei muuda ma kordagi lehe enda koodi ega lisa pluginaid. Muidugi võiks andmete deserialiseerimiseks ka skripti kirjutada, aga sellisel juhul tasub tõenäoliselt arenduskeskkonda üle minna. Alternatiivina võib proovida ka selliseid deserialiseerimise teenuseid nagu https://www.unserialize.com/, aga sel juhul tuleb olla väga ettevaatlik tundliku info sisestamisega.