Gå direkte til indholdet

Cookieindstillinger

Vælg for hver type, hvilke cookies du tillader. Du kan altid ændre dit valg via Cookieindstillinger nederst på hver side. Privatlivspolitik

Nødvendige

Altid slået til

Nødvendige for at logge ind, gemme din kurv og huske dine valg. De er altid slået til.

Hvilke cookies?
  • weboke_sessie, weboke_klant, weboke_remember: din session og at forblive logget ind
  • weboke_basket: din kurv
  • wkBtwIncl: vise priser med eller uden moms
  • wok_cookies: dit cookievalg, 12 måneder

Måler, hvilken annonce der fører til et besøg eller en bestilling, så vi ikke betaler for annoncer, der ikke virker.

Hvilke cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), op til 90 dage
  • OpenAI Ads, annoncer i ChatGPT
  • wok_aff: hvilken partner der henviste dig til os (affiliateprogram), 60 dage

4,6

Land og sprog

Hvert land har sin egen side med landets priser og moms.

Se

Hastighed og caching i en webshop

Modul 6: Administration og sikkerhed · Læsetid: 10 minutter

Læringsmål: Efter denne lektion kan du sætte caching op til en WooCommerce-shop, så butikken er hurtig, og personlige sider aldrig havner i cachen. Du kan også tjekke det i headerlinjerne.

Centrale begreber: sidecache, undtagelser (kurv, kasse, Min konto), cookies der går uden om cachen, no-cache-headerlinjer, DONOTCACHEPAGE, objektcache, Redis, kurvfragmenter, geolokation med sidecache, oprydning i skemalagte handlinger

To slags sider

Det grundlæggende om caching (sidecache, browsercache, objektcache, OPcache, et CDN) står i WordPress-kurset, lektion 6.2. Der står også allerede den vigtigste regel for shops: personlige sider må ikke ligge i sidecachen. Denne lektion går i dybden med det.

En shop har to slags sider:

SlagsEksemplerCache
Ens for alleforside, butiksside, kategorier, produktsider, informationssiderSidecache: ja, her er den største gevinst
Forskellig for hver besøgendekurv, kasse, Min konto, fortrydelsessiden med en logget ind kundeSidecache: aldrig

Går det galt, ser du det med det samme: en kunde ser en andens kurv, eller værre, en andens adresse på kassesiden. Det er også et brud på persondatasikkerheden efter GDPR (KB 6749).

Hvad WooCommerce selv gør

WooCommerce hjælper en cache på tre måder. Det er godt at kende dem, så du kan se, når noget fjerner dem:

  1. Konstanter. På kurv, kasse og Min konto sætter WooCommerce DONOTCACHEPAGE (og også til objekt- og databasecache). Mange cacheplugins læser den konstant og springer siden over.
  2. Headerlinjer. På de samme sider sender WooCommerce WordPress' no-cache-headerlinjer med: Cache-Control: no-cache, must-revalidate, max-age=0, private og en Expires i fortiden. En proxy eller et CDN, der følger reglerne, gemmer så ikke siden. For brugere, der er logget ind, kommer no-store med.
  3. Cookies. Så snart nogen lægger noget i kurven, sætter WooCommerce cookies som woocommerce_items_in_cart, woocommerce_cart_hash og wp_woocommerce_session_.... Gode caches giver ikke længere besøgende med sådan en cookie en gemt side, heller ikke produktsider, fordi for eksempel kurven i sidehovedet så er forskellig for hver besøgende.

WooCommerce' dokumentation anbefaler til cacheplugins: undtag kurv, Min konto og kasse samt cookies woocommerce_cart_hash, woocommerce_items_in_cart, wp_woocommerce_session_, woocommerce_recently_viewed og store_notice[...]. Til Varnish giver den også regler for adresser med ?add-to-cart=.

Hvor det går galt i praksis

  • Andre adresser til shopsiderne. Du har omdøbt kurven til /mandje/, eller et oversættelsesplugin laver /de/warenkorb/. En cache, der undtager faste adresser som /cart, overser dem. Cacheplugins, der kender WooCommerce, læser siderne fra indstillingerne; en cache på serveren eller hos et CDN gør ikke.
  • Et CDN, der cacher alt. Nogle CDN-regler ("cache everything") ignorerer headerlinjerne. Undtag så shopsiderne og de nævnte cookies udtrykkeligt.
  • Et plugin, der overskriver headerlinjerne. Et sikkerheds- eller hastighedsplugin sætter nogle gange Cache-Control: public, max-age=... på alle sider. Så er no-cache-headerlinjerne væk.
  • En session for hver besøgende. Normalt sætter WooCommerce først en sessionscookie, når der ligger noget i kurven. Sætter et plugin eller tema allerede en session for hver besøgende (en cookie wp_woocommerce_session_ eller PHPSESSID ved første besøg), forsvinder sidecachen for alle, og din shop bliver langsom, når der er travlt.
  • Geolokation. Under WooCommerce > Indstillinger > Generel vælger du kundens standardplacering. Med almindelig "Geolokation" beregner serveren landet for hver besøgende, og ved priser pr. land passer det ikke med en sidecache. WooCommerce har derfor indstillingen "Geolokation (med understøttelse af sidecaching)", som finder landet via en ekstra forespørgsel i browseren. Har du ikke brug for priser eller moms pr. land før kassen, så vælg butikkens land: det er det enkleste. Til geolokation downloader WooCommerce jævnligt en database fra MaxMind.

På en LiteSpeed-server (som hos WebOké) klarer pluginnet LiteSpeed Cache selv undtagelserne for WooCommerce; tjek dem i indstillingerne for undtagelser. Med andre webservere og hostingudbydere fungerer det på samme måde med et andet cacheplugin.

Hvad sidecachen ikke løser

Kurv og kasse bygges altid af PHP og databasen. Når der er travlt (et tilbud, et nyhedsbrev), er det netop de sider, hvor dine kunder bruger penge. Her hjælper andre ting:

  • En objektcache som Redis gemmer resultatet af databaseforespørgsler i hukommelsen. I en shop, med mange sider der ikke kan ligge i sidecachen, giver det mærkbart mere end på et almindeligt websted. Dit webhotel skal tilbyde Redis (hos WebOké kan det, DA 15.7); derefter slår du det til med et plugin.
  • Kurvfragmenter. Klassiske temaer opdaterer kurven i sidehovedet med et script (wc-cart-fragments), der laver en ekstra forespørgsel, når kurven ikke er tom. Moderne bloktemaer med minikurv-blokken har mindre brug for det. Indlæs ikke sådanne scripts på sider, hvor de ikke gør noget.
  • Oprydning i skemalagte handlinger. WooCommerce bruger Action Scheduler til baggrundsopgaver (lektion 7.3). Afsluttede handlinger ryddes som standard op efter en måned. Vokser listen alligevel til hundredtusinder, ofte på grund af en udvidelse, der bliver ved med at planlægge noget, eller på grund af mislykkede handlinger, bliver databaseforespørgsler langsommere. Se under WooCommerce > Status > Skemalagte handlinger, hvor mange mislykkede og ventende handlinger der er.
  • HPOS. Ordrer i egne tabeller (lektion 1.2) gør søgning i ordrer hurtigere end i den gamle indlægstabel. Eksisterende butikker skal selv skifte (lektion 6.2 om backup først).
  • En aktuel PHP-version og nok hukommelse (lektion 7.2).

I praksis: sådan ser det ud i WooCommerce

Tjek det hos Tehus Example i et privat vindue med browserens udviklerværktøjer (F12, fanen Netværk, første forespørgsel):

  1. Forsiden, indlæst to gange: anden gang en headerlinje som x-litespeed-cache: hit eller cf-cache-status: HIT. Ingen cookie wp_woocommerce_session_ ved første besøg.
  2. shop.example.com/winkelwagen/, indlæst to gange: intet hit, og cache-control med no-cache eller private.
  3. Det samme for kasse og Min konto.
  4. Læg et produkt i kurven og indlæs en produktside: du ser din egen kurv, ikke en gemt version.

Opsummering

  • Sider, der er ens for alle, i cachen; kurv, kasse og Min konto aldrig.
  • WooCommerce sætter selv DONOTCACHEPAGE, no-cache-headerlinjer og cookies; tjek, at intet fjerner eller ignorerer dem.
  • Pas på omdøbte adresser, CDN-regler, plugins der overskriver headerlinjer, sessioner for alle besøgende og geolokation.
  • Redis, oprydning i skemalagte handlinger, HPOS og en god PHP-version hjælper, hvor sidecachen ikke kan.
  • Test ved at indlæse to gange i et privat vindue og læs headerlinjerne.

Quiz

1. En kunde ser produkter i sin kurv, som han ikke har valgt. Hvad er den mest sandsynlige årsag?



2. Hvilken headerlinje forventer du på kassesiden i en WooCommerce-shop?



3. Din shop viser ikke priser pr. land, men standardplaceringen står på "Geolokation". Hvad er en enkel forbedring for cachen?



4. Hvorfor hjælper Redis mere i en shop end på et almindeligt informationswebsted?



Opgave

Opgave A6.4: Bliver kurv og kasse uden for cachen? Indtast adressen på din shop og adresserne på din kurv og din kasseside (og eventuelt Min konto). Programmet henter forsiden to gange med 2 sekunders mellemrum uden cookies og derefter hver shopside også to gange. Der lægges intet i kurven, og der bestilles intet. Grøn, hvis forsiden anden gang kommer fra cachen (eller er tydeligt hurtigere) uden at sætte en sessionscookie, og hvis hver shopside anden gang ikke har et cachehit og sender en Cache-Control med no-cache, no-store, private eller max-age=0. Orange, hvis forsiden ikke bruger cache, eller hvis en shopside ikke har et hit, men heller ingen no-cache-headerlinje. Rød ved et cachehit på kurv, kasse eller Min konto, eller hvis forsiden starter en WooCommerce-session for hver besøgende.

Et grønt flueben betyder, at dette tjek er i orden nu, ikke at din shop er sikker.

Opgave A6.4: Bliver kurv og kasse uden for cachen?





Det, du udfylder, og hvad vi finder, gemmer vi ikke. Din browser husker dine svar, og om du har bestået opgaven. Er du logget ind, gemmer vi kun, at du (næsten) bestod opgaven, i Mine kurser; der kan du også slette det.

Læs videre

Trin i et kontrolpanel gælder for WebOké; hos andre udbydere fungerer det på samme måde.

Et øjeblik…

Opsæt dine domæner

Angiv for hvert domæne navneserverne, tilknytningen til din hosting, og hvem der bliver ejer.

Indlæser dine domæner…