Salt la conținut

Setări cookie-uri

Alegeți pentru fiecare tip ce cookie-uri permiteți. Puteți modifica oricând alegerea prin Setări cookie-uri, în partea de jos a fiecărei pagini. Declarație de confidențialitate

Necesare

Mereu active

Necesare pentru autentificare, pentru păstrarea coșului și pentru a vă reține alegerile. Acestea sunt mereu active.

Ce cookie-uri?
  • weboke_sessie, weboke_klant, weboke_remember: sesiunea și menținerea autentificării
  • weboke_basket: coșul de cumpărături
  • wkBtwIncl: afișarea prețurilor cu sau fără TVA
  • wok_cookies: alegerea privind cookie-urile, 12 luni

Măsoară ce reclamă duce la o vizită sau o comandă, ca să nu plătim pentru reclame care nu aduc nimic.

Ce cookie-uri?
  • Google Ads prin Google Tag Manager (_gcl_au, _gcl_aw), până la 90 de zile
  • OpenAI Ads, reclame în ChatGPT
  • wok_aff: prin ce partener ați ajuns la noi (program de afiliere), 60 de zile

4,6

Țară și limbă

Fiecare țară are propriul site, cu prețurile și TVA-ul pentru țara respectivă.

Vedeți

Viteza și cache-ul într-un magazin online

Modulul 6: Administrare și securitate · Timp de citire: 10 minute

Obiectiv de învățare: După această lecție puteți configura cache-ul pentru un magazin WooCommerce astfel încât magazinul să fie rapid, iar paginile personale să nu ajungă niciodată în cache, și puteți verifica acest lucru în anteturile HTTP.

Noțiuni cheie: cache pagini, excluderi (coș, finalizare comandă, Contul meu), cookie-uri care ocolesc cache-ul, anteturi no-cache, DONOTCACHEPAGE, cache de obiecte, Redis, fragmente de coș, geo-localizare cu cache pagini, curățarea acțiunilor programate

Două tipuri de pagini

Bazele cache-ului (cache pagini, cache de browser, cache de obiecte, OPcache, un CDN) sunt prezentate în cursul WordPress, lecția 6.2. Acolo se află deja și cea mai importantă regulă pentru magazinele online: paginile personale nu au voie să ajungă în cache-ul paginilor. Această lecție o explică în detaliu.

Un magazin online are două tipuri de pagini:

TipExempleCache
La fel pentru toată lumeapagina principală, pagina magazinului, categoriile, paginile de produs, paginile informativeCache pagini: da, aici este cel mai mare câștig
Diferite pentru fiecare vizitatorcoșul, finalizarea comenzii, Contul meu, pagina de retragere cu un client autentificatCache pagini: niciodată

Dacă ceva nu funcționează, observați imediat: un client vede coșul altcuiva sau, mai grav, adresa altei persoane pe pagina de finalizare a comenzii. Aceasta este și o încălcare a securității datelor în sensul GDPR (KB 6749).

Ce face deja WooCommerce

WooCommerce ajută cache-ul în trei moduri și este bine să le cunoașteți, ca să observați când ceva le elimină:

  1. Constante. Pe coș, finalizarea comenzii și Contul meu, WooCommerce setează DONOTCACHEPAGE (și constante similare pentru cache-ul de obiecte și de bază de date). Multe module de cache citesc această constantă și sar peste pagina respectivă.
  2. Anteturi HTTP. Pe aceleași pagini, WooCommerce trimite anteturile no-cache ale WordPress: Cache-Control: no-cache, must-revalidate, max-age=0, private și un Expires în trecut. Un proxy sau un CDN care respectă regulile nu păstrează atunci pagina. Pentru utilizatorii autentificați se adaugă și no-store.
  3. Cookie-uri. De îndată ce cineva pune ceva în coș, WooCommerce setează cookie-uri precum woocommerce_items_in_cart, woocommerce_cart_hash și wp_woocommerce_session_.... Cache-urile bune nu mai livrează pagini salvate vizitatorilor care au un astfel de cookie, nici măcar pentru paginile de produs, deoarece, de exemplu, coșul din antetul site-ului diferă atunci de la un vizitator la altul.

Documentația WooCommerce recomandă pentru modulele de cache: excludeți coșul, Contul meu și finalizarea comenzii, precum și cookie-urile woocommerce_cart_hash, woocommerce_items_in_cart, wp_woocommerce_session_, woocommerce_recently_viewed și store_notice[...]. Pentru Varnish oferă și reguli pentru adresele cu ?add-to-cart=.

Unde apar problemele în practică

  • Alte adrese pentru paginile magazinului. Ați redenumit coșul în /mandje/ sau un modul de traducere creează /de/warenkorb/. Un cache care exclude adrese fixe precum /cart le ratează. Modulele de cache care cunosc WooCommerce citesc paginile din setări; un cache pe server sau la un CDN nu face acest lucru.
  • Un CDN care pune totul în cache. Unele reguli CDN („cache everything”) ignoră anteturile HTTP. În acest caz, excludeți explicit paginile magazinului și cookie-urile menționate.
  • Un modul care suprascrie anteturile. Un modul de securitate sau de viteză setează uneori pe fiecare pagină Cache-Control: public, max-age=.... Atunci anteturile no-cache nu mai sunt prezente.
  • O sesiune pentru fiecare vizitator. În mod normal, WooCommerce setează un cookie de sesiune abia când există ceva în coș. Dacă un modul sau o temă pornește o sesiune pentru fiecare vizitator (un cookie wp_woocommerce_session_ sau PHPSESSID la prima vizită), cache-ul paginilor nu mai funcționează pentru nimeni, iar magazinul dumneavoastră devine lent la trafic mare.
  • Geo-localizare. La WooCommerce > Setări > Generale alegeți locația implicită a unui client. Cu simpla opțiune „Geo-localizare”, serverul calculează țara pentru fiecare vizitator, iar în cazul prețurilor pe țară acest lucru nu se potrivește cu un cache pagini. De aceea, WooCommerce are opțiunea „Geo-localizare (cu suport pentru cache pagini)”, care determină țara printr-o solicitare suplimentară din browser. Dacă nu aveți nevoie de prețuri sau TVA pe țară înainte de finalizarea comenzii, alegeți țara magazinului: este varianta cea mai simplă. Pentru geo-localizare, WooCommerce descarcă periodic o bază de date de la MaxMind.

Pe un server LiteSpeed (ca la WebOké), modulul LiteSpeed Cache gestionează singur excluderile pentru WooCommerce; verificați-le în setările pentru excludere. La alte servere web și alți furnizori de găzduire, lucrurile funcționează similar cu un alt modul de cache.

Ce nu rezolvă cache-ul paginilor

Coșul și finalizarea comenzii sunt generate întotdeauna de PHP și de baza de date. La trafic mare (o promoție, un buletin informativ), acestea sunt exact paginile pe care clienții dumneavoastră cheltuiesc bani. Acolo ajută alte lucruri:

  • Un cache de obiecte precum Redis păstrează în memorie rezultatul interogărilor către baza de date. La un magazin online, cu multe pagini care nu pot intra în cache-ul paginilor, câștigul este vizibil mai mare decât la un site obișnuit. Găzduirea dumneavoastră trebuie să ofere Redis (la WebOké este posibil, DA 15.7); apoi îl activați cu un modul.
  • Fragmente de coș. Temele clasice actualizează coșul din antet cu un script (wc-cart-fragments) care face o solicitare suplimentară atunci când coșul conține produse. Temele moderne bazate pe blocuri, cu blocul mini-coș, au mai puțină nevoie de acest lucru. Nu încărcați astfel de scripturi pe paginile unde nu au niciun rol.
  • Acțiuni programate curățate. WooCommerce folosește Action Scheduler pentru sarcinile din fundal (lecția 7.3). Acțiunile finalizate sunt șterse implicit după o lună. Dacă lista ajunge totuși la sute de mii, adesea din cauza unei extensii care tot programează ceva sau a acțiunilor eșuate, interogările către baza de date devin mai lente. Verificați la WooCommerce > Stare > Acțiuni programate numărul acțiunilor eșuate și al celor în așteptare.
  • HPOS. Comenzile în tabele proprii (lecția 1.2) fac căutarea în comenzi mai rapidă decât în vechiul tabel de articole. Magazinele existente trebuie să facă singure trecerea (lecția 6.2 despre copiile de siguranță făcute în prealabil).
  • O versiune actuală de PHP și suficientă memorie (lecția 7.2).

În practică: cum arată în WooCommerce

Verificați acest lucru la Theehuis Example într-o fereastră privată, cu instrumentele pentru dezvoltatori ale browserului dumneavoastră (F12, fila Rețea, prima solicitare):

  1. Pagina principală, încărcată de două ori: la a doua încărcare, un antet precum x-litespeed-cache: hit sau cf-cache-status: HIT. Niciun cookie wp_woocommerce_session_ la prima vizită.
  2. shop.example.com/winkelwagen/, încărcată de două ori: niciun hit, iar cache-control conține no-cache sau private.
  3. La fel pentru finalizarea comenzii și Contul meu.
  4. Puneți un produs în coș și încărcați o pagină de produs: vedeți propriul coș, nu o versiune salvată.

Rezumat

  • Paginile care sunt la fel pentru toată lumea merg în cache; coșul, finalizarea comenzii și Contul meu, niciodată.
  • WooCommerce setează singur DONOTCACHEPAGE, anteturi no-cache și cookie-uri; verificați ca nimic să nu le elimine sau să le ignore.
  • Atenție la adresele redenumite, regulile CDN, modulele care suprascriu anteturile, sesiunile pentru fiecare vizitator și geo-localizare.
  • Redis, acțiunile programate curățate, HPOS și o versiune bună de PHP ajută acolo unde cache-ul paginilor nu poate fi folosit.
  • Testați prin încărcare dublă într-o fereastră privată și citiți anteturile HTTP.

Test (quiz)

1. Un client vede în coșul său produse pe care nu le-a ales. Care este cauza cea mai probabilă?



2. Ce antet vă așteptați să găsiți pe pagina de finalizare a comenzii unui magazin WooCommerce?



3. Magazinul dumneavoastră nu afișează prețuri pe țară, dar locația implicită este setată pe „Geo-localizare”. Care este o îmbunătățire simplă pentru cache?



4. De ce ajută Redis mai mult la un magazin online decât la un site informativ obișnuit?



Exercițiu

Exercițiul A6.4: Coșul și finalizarea comenzii rămân în afara cache-ului? Introduceți adresa magazinului dumneavoastră și adresele paginii de coș și ale paginii de finalizare a comenzii (și, eventual, Contul meu). Programul solicită pagina principală de două ori, la 2 secunde distanță, fără cookie-uri, apoi fiecare pagină a magazinului tot de două ori. Nu se pune nimic în coș și nu se comandă nimic. Verde dacă pagina principală vine din cache la a doua solicitare (sau este vizibil mai rapidă) fără să seteze un cookie de sesiune și dacă fiecare pagină a magazinului nu are un hit de cache la a doua solicitare și trimite un Cache-Control cu no-cache, no-store, private sau max-age=0. Portocaliu dacă pagina principală nu folosește cache sau dacă o pagină a magazinului nu are hit, dar nici antet no-cache. Roșu la un hit de cache pe coș, finalizarea comenzii sau Contul meu, ori dacă pagina principală pornește o sesiune WooCommerce pentru fiecare vizitator.

O bifă verde înseamnă că această verificare este acum corectă, nu că magazinul dumneavoastră este sigur.

Exercițiul A6.4: Coșul și finalizarea comenzii rămân în afara cache-ului?





Ceea ce completați și ceea ce găsim nu se salvează. Browserul dumneavoastră reține răspunsurile și dacă ați rezolvat exercițiul. Dacă sunteți autentificat, păstrăm în Cursurile mele doar faptul că exercițiul a fost (aproape) corect; și de acolo îl puteți șterge.

Lecturi suplimentare

Pașii dintr-un panou de control se aplică la WebOké; la alți furnizori funcționează în mod similar.

Un moment…

Configurați domeniile

Stabiliți pentru fiecare domeniu nameserverele, legătura cu hostingul și cine devine titularul.

Se încarcă domeniile…