monitor3

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 stagingus, 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 mitmeid mooduseid.

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-i 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 et olenevalt liiklustiheduest live-keskkonnas täituvad error log’id kiiresti ning seal, kus võimalik, tasub üldiselt vältida live‘s asjade muutmist.

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

Minu vastus on andmebaasist. Selleks, et neid sealt kätte saada, peame aga teadma natuke kuidas WordPress ja WooCommerce oma sessiooni andmeid haldavad. Kõige lihtsam on alustada sellest, et uurida, kuidas WooCommerce ise neid andmeid loeb.

Kuidas loeb WC Session andmeid andmebaasist?

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

Leiame WP_WOOCOMMERCE_SESSION küpsise

Esimese etapina on mul esmalt 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. Seal all peaks olemas olema Cookie nimega wp_woocommerce_session_###
Kui seda küpsist ei ole veel paigas, siis järelikult pole seda loodud. Selle loomine toimub tavaliselt esimese toote ostukorvi lisamisel.

Kui küpsis leitud, siis minu sessiooni puhul on küpsis sellise väärtusega:
t_9074f44d173cf2b09e3bf0f13c42be%7C%7C1695290548%7C%7C1695286948%7C%7Ccc0474d0519c721a98eafa404da9c98f

Sellest on mul vaja ainult esimest osa. Esimene osa ulatub kuni esimese % märgini. Praegusel juhul:
t_9074f44d173cf2b09e3bf0f13c42be

Kiiremini, kõrgemale, kaugemale ja andmebaasi

Nüüd on mul käes minu sessiooni ID, aga sellest pole otseselt kasu kuna see ei sisalda sisulist infot. Ülejäänud info asub meil andmebaasis. Selleks on praegusel juhul vaja liikuda PhpMyAdmini (aga põhimõtteliselt sobib ükskõik missugune andmebaasi haldusliides). Näiteks Zone‘s käib see siit:
Veebimajutus->Andmebaasid->PhpMyAdmin.

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

Edasi otsin üles “wp_woocommerce_sessions” tabeli. See näeb üldjuhul välja umbes selline:

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

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

Olemas!

Põhimõtteliselt saan siin ka session_value tulpa laiemaks teha või ka sisu kopeerida, aga olen leidnud, et teatud juhtudel PhpMyAdmini liides ei anna mulle session_value välja täismahus.

Lisaks on mul vaja sessiooni andmeid võrrelda erinevate toimingute vahel samal ajal, kui lehel toimetan. Iga toimingu järel uut päringut teha on väga tüütu.


Eksport

Selleks saan ära kasutada PhpMyAdmini export funktsiooni. Selle jaoks tuleb valida rida, mida soovin eksportida ning valida “Ekspordi”.

See avas uue ekspordi vaate, kus põhimõtteliselt ei pea midagi muutma. Ma ise küll valin ekspordi formaadiks hetkel PHP array kuna see on küllaltki inimloetav. Kuna meid huvitav info on niikuinii serialized, siis tuleb natuke keerulisemat lugemist teha.

Vajutades “ekspordi” salvestatakse see rida arvutisse ekspordifailina. See fail nüüd sisaldab kogu WC_Sessioni andmeid.

Snapshotid hetkest

Sedapidi andmete ekspordi eelis on, et saame eksportida ühte rida lõputu arv kordi. Iga kord, kui andmeid on vaja uuesti eksportida, tuleb sellel lehel vajutada uuesti “eksport”. Ei pea uuesti rida valima või lehte refreshima. See tähendab ka, et hilisemaks analüüsiks on olemas eraldi failid erinevatest ajahetkedest. See tuleb kasuks, kui on vaja võrrelda sessiooni andmeid erinevate tegevuste vahel. Näiteks enne toote korvi lisamist, peale korvi lisamist jne.


Lõpetuseks

Nii WC_Sessioni andmete kättesaamine ei pruugi iga kord olla kõige optimaalsem moodus. Selle eelis on, et ma ei muuda kordagi lehe enda koodi ega lisa pluginaid. Siit võiksin muidugi lahendust edasi optimeerida ning kirjutada ka skripti, et andmed de-serialiseerida, aga sellisel juhul tasub tõenäoliselt üle minna arenduskeskkonda. Alternatiivina võib proovida ka selliseid teenuseid de-serialiseerimiseks nagu https://www.unserialize.com/, aga nende puhul ei tasuks kunagi tundliku infot sisestada.




Leave a Comment