Cookies werden voor het eerst uitgevonden in 1994 door een computerprogrammeur genaamd Lou Montulli. Zonder heb zou het internet een heel andere plek zijn. Of je nu inlogt op de back-end van jouw WordPress-site of een irritant pop-up-venster sluit, je gebruikt en communiceert elke dag met cookies (zelfs wanneer je het niet weet).
Inmiddels heb je waarschijnlijk geraden dat wanneer we naar cookies verwijzen, we de cookies bedoelen die worden gebruikt om belangrijke bezoekersinformatie op te slaan op een website, niet de lekkere chocolade-chip soort. 🍪
Vandaag duiken we in de soms verwarrende onderwerpen van cookies en PHP-sessies. Specifiek: alles wat jij moet weten over hoe WordPress deze gebruikt, samen met enkele veelvoorkomende problemen waar je bewust van moet zijn (vooral als ontwikkelaar) als het gaat om het hosten van je website, aangepaste code of het gebruik van een plugin van een externe partij. Naar onze mening wordt dit onderwerp niet genoeg besproken.
Wat zijn Cookies?
Een cookie (ook wel een web cookie, tracking cookie, HTTP cookie of browser cookie genoemd) is een klein stukje data dat wordt opgeslagen door de browser van een gebruiker (Chrome, Firefox, etc.) wanneer zij een website bezoeken. Het bevat informatie over browser-activiteit en wordt meestal gebruikt om de gebruikerservaring of authenticatie- en verificatiedoeleinden te personaliseren. Sessie cookies en permanente cookies zijn de meest voorkomende soorten cookies.
- Soorten Cookies
- Hoe gebruikt de WordPress Core Cookies
- Hoe gebruiken externe WordPress plugins en Thema’s Cookies
- Cookies en WordPress Caching
- Hoe Bekijk en Verwijder je Cookies
- GDPR en Cookies
- PHP Sessies
Soorten Cookies
Er zijn verschillende soorten cookies die veel gebruikt worden: sessie cookies en permanente cookies.
Sessie cookies
Sessie cookies, ook bekend als tijdelijke cookies, zijn tijdelijk. Ze hebben geen vervaldatum en slaan alleen informatie op over wat de gebruiker tijdens een enkele sessie doet. Een sessie is gewoon een willekeurig gegenereerde/unieke waarde die wordt toegewezen wanneer iemand een website bezoekt. Sessiecookies worden tijdelijk in het geheugen opgeslagen en worden automatisch verwijderd wanneer de browser wordt gesloten of de sessie wordt beëindigd.
Permanente cookies
Permanente cookies, zoals je waarschijnlijk al geraden hebt, zijn de cookies met een houdbaarheidsdatum. Deze gaan veel langer mee en worden op de schijf opgeslagen totdat ze vervallen of handmatig worden gewist door de gebruiker. Deze worden ook wel ’tracking cookies’ genoemd, omdat dit de soort cookie is die Google Analytics, AdRoll, Stripe, etc. allemaal gebruiken.
Ons Kinsta-partnerprogramma is een ander voorbeeld. Een cookie van 60 dagen wordt in de browser van de gebruiker geplaatst wanneer ze op een partnerlink klikken. Dit zorgt ervoor dat de verwijzende persoon het juiste krediet krijgt, zelfs wanneer de persoon zijn browser meerdere keren heeft gesloten en opnieuw heeft geopend.
Hoe Gebruikt de WordPress Core Cookies
Wanneer we verwijzen naar de kern van WordPress, bedoelen we alleen de bestanden die deel uitmaken van het open-source project, voordat je plugins of thema’s van externe partijen installeert. Het is WordPress in zijn natuurlijke staat zoals wij het graag noemen.
Nu je de basiskennis hebt van wat een cookie is en de verschillende soorten die er zijn, laten we eens kijken waarom en hoe de WordPress core ze gebruikt om al die magie achter de schermen te laten gebeuren. Leuk feitje: Cookie is oorspronkelijk afgeleid van de term ‘magic cookie‘.
De WordPress core maakt gebruik van cookies voor twee verschillende doeleinden:
1. Login Cookies
Login cookies bevatten authenticatie-gegevens en worden gebruikt wanneer een gebruiker zich aanmeldt bij het WordPress dashboard. Volgens de WordPress Codex worden een aantal verschillende sessiecookies ingesteld:
- Bij inloggen gebruikt WordPress de
wordpress_[hash]
cookie om authenticatie-gegevens op te slaan (beperkt tot de/wp-admin/
area). - Na het inloggen stelt WordPress de
wordpress_logged_in_[hash]
cookie in. Dit geeft aan wanneer je bent ingelogd en wie je bent.
Wanneer je probeert toegang te krijgen tot de back-end van de WordPress-site, wordt gecontroleerd of de bovenstaande twee cookies bestaan en niet verlopen zijn. Dit is wat jou toestaat om op magische wijze het wp-login.php
scherm te omzeilen. 😉
WordPress stelt ookwp-settings-{time}-[UID]
cookies in. Het ID is jouw gebruikers-ID uit de databasetabel van WordPress-gebruikers. Hiermee worden persoonlijke dashboard- en beheerders instellingen opgeslagen.
2. Reactie Cookies
Standaard worden er cookies ingesteld wanneer iemand commentaar geeft op een blog bericht (met een vervaltijd van 347 dagen). Dit is voor het geval wanner ze later terugkomen, dan hoeven ze niet alle informatie opnieuw in te vullen. De volgende drie cookies worden opgeslagen:
comment_author_[hash]
comment_author_email_[hash]
comment_author_url_[hash]
Met de recente wijzigingen in het privacybeleid vanwege GDPR zijn echter nieuwe tools geïntroduceerd door de WordPress core om ervoor te zorgen dat gebruikers zich kunnen aanmelden voor het instellen van deze cookies. Deze instelling, indien nog niet ingesteld, kan worden ingeschakeld onder “Instellingen → Discussie” in jouw WordPress dashboard. Selecteer de optie ‘Toon reactie cookies opt-in’. De populaire Akismet plugin geeft je ook de mogelijkheid om een privacyverklaring weer te geven.
Hoe Gebruiken Externe WordPress Plugins en Thema’s Cookies
Net zoals WordPress cookies gebruikt voor bepaalde functionaliteit, stellen externe plugins en thema’s die je installeert ook cookies in. De meesten van hen gebruiken een combinatie van browser cookies en database-rijen die zijn opgeslagen in de wp_options tabel of hun eigen aangepaste tabel. Dit is omdat WordPress stateless is.
Een stateless app is een applicatie dat geen client-gegevens bewaart die in een sessie zijn gegenereerd voor gebruik in de volgende sessie met die client. Elke sessie wordt uitgevoerd alsof het de eerste keer is en de responses zijn niet afhankelijk van gegevens uit een vorige sessie. – TechTarget
Dankzij de nieuwe privacywetten is het belangrijker dan ooit om daadwerkelijk te begrijpen welke cookies worden ingesteld en of ze jouw bezoekers de mogelijkheid bieden zich hiervoor aan te melden. Tip: niet alle cookies vereisen opt-in. Lees ons uitgebreide artikel over GDPR voor een beter begrip van nieuwe vereisten.
Hier zijn slechts een paar van de vele voorbeelden van waar cookies voor worden gebruikt:
- Wanneer je een pop-up op jouw WordPress website hebt en een bezoeker deze sluit, wordt er meestal een cookie ingesteld zodat deze niet meer terugkomt.
- Items die worden toegevoegd aan een winkelwagentje op jouw e-commerce website. Een cookie wordt opgeslagen, zodat het winkelwagentje de producten bewaart terwijl je rond de site surft.
- IP Geolocation-functies kunnen het IP-adres, de lengte- en breedtegraad coördinaten opslaan van de bezoeker die op de site surft. Dit wordt meestal gebruikt om inhoud te tonen aan een specifieke regio of om de gebruiker door te sturen naar een andere subsite.
- Activiteit bijhouden over klikken met een link verkorter zoals de PrettyLinks plugin.
- Een plugin voor een nieuwsbrief kan een cookie voor gebruikers instellen wanneer ze al zijn geabonneerd, dit geeft de mogelijkheid om de nieuwsbrief volledig te verbergen.
In wezen elke actie of opt-in op een WordPress website, houdt meestal in dat een cookie in de browser wordt geplaatst. Het doel hiervan is natuurlijk om te proberen de browser ervaring te verbeteren of extra functionaliteiten te bieden door middel van verificatie.
WooCommerce Cookies
Ecommerce plugins zoals WooCommerce hebben meestal hun eigen aanvullende cookies die worden ingesteld, zodat kopers gemakkelijk items aan hun winkelwagentje kunnen toevoegen, kunnen opslaan wanneer ze afrekenen en zich kunnen aan- en afmelden bij hun account.
Om de gegevens van het winkelwagentje bij te houden, stelt WooCommerce de volgende drie cookies in (er worden geen persoonlijke gegevens in deze cookies opgeslagen):
woocommerce_cart_hash
woocommerce_items_in_cart
wp_woocommerce_session_
De eerste twee cookies bevatten informatie over het winkelwagentje en helpen WooCommerce te begrijpen wanneer de gegevens van het winkelwagentje veranderen. De derde cookie wp_woocommerce_session_
bevat een unieke code voor elke klant die overeenkomt met een vermelding in de eigen tabel wp_woocommerce_sessions
in de database.
De gegevens wp_commerce_session_
werden voorheen opgeslagen in de wp_options tabel, maar is in WooCommerce 2.5 naar zijn eigen tabel verplaatst toen een nieuwe sessie-afhandelings routine geïntroduceerd werd. Dit was om de prestaties, schaalbaarheid en beheer van sessies te verbeteren. Anders krijg je snel een vervuilde wp_options tabel die je moet opruimen.
Easy Digitial Downloads Cookies
Easy Digital Downloads maakt standaard gebruik van WP_Session, een combinatie van browser cookies en database-rijen die staan opgeslagen in de wp_options
tabel. Hieronder staat een cookie die wordt geplaatst door EDD:
edd_items_in_cart
Cookies en WordPress Caching
Wanneer het gaat om WordPress cache, is dit de plek waar dingen lastig worden. Caching is in feite het proces van het opslaan van resources van één aanvraag en het hergebruiken van die resources voor daarop volgende aanvragen. Kortom, het vermindert de hoeveelheid werk die nodig is om een paginaweergave te genereren. Hoewel dit geweldig is voor prestaties, het veroorzaakt een probleem als het gaat om cookies.
Waarom? Omdat cookies er zijn om een bepaalde actie uit te voeren, zoals het winkelwagentje gevuld houden terwijl je rondkijkt op een WooCommerce-site. Als een pagina echter vanuit de cache wordt geserveerd, doet noch PHP, noch de database iets, de server serveert eenvoudigweg een statische kopie van de pagina.
Dus wat kan je doen?
1. Gebruik JavaScript
De eerste optie zou zijn om JavaScript te gebruiken en inhoud op een pagina dynamisch bij te werken. Kortom, je hebt tijdelijke HTML placeholders en gebruikt JavaScript om informatie in te voeren via een API- of Ajax-call.
Een voorbeeld is het laden van een lijst met berichten in de WordPress zijbalk door JavaScript te gebruiken om een lijst met berichten via de wp-api op te halen en ze vervolgens in de zijbalk weer te geven. In dat scenario zou je de lijst met berichten kunnen bijwerken zonder de pagina uit de cache te wissen, omdat de gegevens dynamisch worden gegenereerd.
Dit is echter niet ideaal, het is altijd beter om zo veel mogelijk in cache te zetten in termen van prestaties. Maar wanneer je een beetje inhoud dynamisch moet hebben terwijl de pagina zelf statisch kan blijven (geserveerd vanuit de cache), dan is dat een manier om het te doen – gebruik JavaScript om de content van dat gedeelte van de pagina dynamisch weer te geven via een API/Ajax call. Tenzij je een WordPress-ontwikkelaar kunt inhuren om een aangepaste JavaScript-oplossing of een plugin te bouwen, is deze optie meestal niet erg praktisch.
2. Gebruik Admin-Ajax Calls
Admin-ajax.php
kan niet in de cache worden opgeslagen, daarom je admin-ajax-calls gebruiken. Een goed voorbeeld hiervan is de No Cache AJAX Widgets plugin. Het maakt admin-ajax-calls en hoeft zich daarom geen zorgen te maken over conflicten met cache-oplossingen op serverniveau of met externe partijen.
Net als bij JavaScript is het niet nodig om deze route af te leggen voor de gemiddelde gebruiker. Het kan ook leiden tot andere prestatieproblemen, zoals een hoog gebruik van admin-ajax en veel niet-gecachte verzoeken.
3. Sluit Pagina’s uit van Caching (Wanneer het Cookie Aanwezig is)
Tenzij je de JavaScript- of admin-ajax-route kunt nemen, is het uitsluiten van pagina’s van caching wanneer een specifieke cookie aanwezig is, de beste manier om te kiezen. Dit is meestal wat we aanbevelen, vooral op zeer dynamische sites zoals WooCommerce en Easy Digital Downloads.
Bij Kinsta worden bepaalde WooCommerce- en Easy Digital Downloads-pagina’s zoals winkelwagen, mijn account en betaalpagina’s automatisch uitgesloten van caching. Er is een regel op serverniveau aanwezig, zodat gebruikers automatisch de cache omzeilen wanneer de woocommerce_items_in_cart
cookie of edd_items_in_cart
cookie wordt gedetecteerd om een soepel en in-sync betaalproces te garanderen.
We controleren ook de bijbehorende inlog cookies en stellen de cache in op bypass wanneer we detecteren dat iemand zich heeft aangemeld bij WordPress. Dit voorkomt dat het back-end dashboard per ongeluk in de cache wordt geplaatst.
Standaard sluiten we de cookie wp_woocommerce_session_
NIET uit bij het cachen. Uit onze ervaring blijkt dat de meeste WooCommerce-sites geen problemen ondervinden. Dit verbetert ook de prestaties door de HIT-ratio van je cache te verhogen, terwijl minder PHP-workers nodig zijn.
Omdat er echter veel verschillende WordPress-thema- en plugin-configuraties mogelijk zijn, kunnen we de wp_woocommerce_session_
-cookie indien nodig uitsluiten van de cache. Neem daarvoor gerust contact op met ons supportteam. Het resultaat is dat zodra een gebruiker een product aan zijn winkelwagentje toevoegt, alle volgende aanvragen niet meer worden geleverd vanuit de cache, waardoor het gebruik van PHP-workers toeneemt.
Wanneer je een aangepaste pagina nodig hebt die moet worden uitgesloten van de cache, kan je een ticket openen bij ons ondersteuningsteam. Nogmaals, je moet voorzichtig zijn wanneer het gaat om uitsluitingen. Te veel niet-gecachte pagina’s kunnen de prestaties echt verslechteren. Bekijk onze do’s en don’ts voor het hosten van WordPress lidmaatschap websites.
Hoe Bekijk en Verwijder je Cookies
Het is gemakkelijk om cookies op een website te bekijken en te wissen. Om te zien welke cookies op een specifieke site zijn ingesteld, navigeer je naar die site en klik je op het kleine hangslot-symbool bovenaan. Klik vervolgens op ‘Cookies’.
Ga vervolgens naar de map van die website. In het onderstaande voorbeeld kan je zien dat er een aantal WooCommerce-cookies zijn ingesteld, evenals de cookie wordpress_logged_in_[hash]
. Je kunt ook zien wanneer het cookie verloopt en of het een permanent cookie of sessie cookie is (wanneer de browser-sessie eindigt).
Om een cookie te verwijderen, klik je op een individueel cookie en klik op de knop “Verwijderen”. Je kunt dit ook doen op map niveau of in Chrome DevTools.
Het wissen van cookies kan u ook helpen om de 304 fout te verhelpen.
Als alternatief kan je alle cookies in de browser zoeken of wissen.
GDPR en Cookies
GDPR is een nieuwe privacywet die op 25 mei 2018 in werking is getreden. Het is ontworpen om burgers controle te geven over hun persoonlijke gegevens. We raden ten zeerste aan om ons uitgebreide artikel te lezen: de inzichten in het voldoen aan de GDPR wet als je dat nog niet hebt gedaan. Dit is een onderwerp dat niet in een alinea kan worden samengevat!
Hier is een voorbeeld van één verandering die we bij Kinsta hebben aangebracht om aan de nieuwe wet te voldoen. Wanneer je onze site voor het eerst bezoekt, heb je deze mogelijk al gezien, krijg je de melding “Accepteer cookies” onderaan het scherm. Dit komt omdat we nu wettelijk verplicht zijn om gebruikers een manier te bieden om opt-in en opt-out van cookies kiezen. Voorbij zijn de dagen van gewoon verzamelen wat je wilt zonder gebruikers te informeren over het verzamelen van de gegevens.
Als je op “Cookies accepteren” klikt, worden alle cookies voor de gebruiker ingesteld. Wanneer je op ‘Cookie-instellingen’ klikt, bieden we nu een manier om je aan te melden voor elk gewenst cookie.
Behoorlijk handig toch? Onze cookie-oplossing is door onze eigen ontwikkelaars gebouwd, maar hier zijn enkele nuttige GDPR WordPress-plugins die je kunnen helpen iets soortgelijks te bereiken. Nogmaals, cookies zijn slechts een klein onderdeel van het volledig voldoen aan de GDPR wet.
PHP Sessies
PHP-sessies zijn een alternatief voor de standaard cookie-aanpak. Het is nog steeds een cookie, maar het wordt PHPSESSID genoemd en wordt meestal opgeslagen in de /tmp/
map op de webserver zelf. De manier waarop de server een bepaalde sessie aan een bepaald verzoek weet te koppelen, is dat deze ook in een HTTP-cookie is opgeslagen.
Je kunt dit ook zien in de HTTP header voor een website.
Een PHP-sessie lijkt veel op een normale sessie die eindigt wanneer de gebruiker zijn browser sluit.
Het probleem met PHP-sessies komt allemaal neer op problemen met prestatie en caching. De informatie die is opgeslagen in de browser cookie moet bij elk verzoek heen en weer worden teruggestuurd, zodat de server weet wie de gebruiker is. Dit betekent dat voor sites die PHPSESSID gebruiken, de host de PHPSESSID moet instellen om de cache te omzeilen. Het resultaat is echter dat PHPSESSID 100% van de tijd moet worden ingesteld om te worden omzeild, in tegenstelling tot wordpress_logged_in
is de PHPSESSID ingesteld voor elk PHP-verzoek.
Stel je dus voor dat wordpress_logged_in
100% van de tijd moet worden ingesteld om inlog functionaliteit te laten werken. Dit betekent dat zelfs uitgelogde gebruikers het cookie moeten hebben en dat deze uniek moet zijn. Stel je voor dat dit nodig was om het login-systeem van WordPress te laten werken. In dat scenario moet elke weergave van een pagina de cache omzeilen, zodat het cookie wordpress_logged_in
correct wordt ingesteld, zowel voor ingelogde als uitgelogde gebruikers.
Dat is het probleem met het gebruik van PHPSESSID. Omdat het bij elk afzonderlijk PHP-verzoek wordt gegenereerd, moet de host, als een website vertrouwt op PHPSESSID-cookies, PHPSESSID instellen om de cache 100% van de tijd te omzeilen. Anders worden de PHPSESSID’s in de cache opgeslagen en is de functionaliteit beschadigd.
We raden af om PHP-sessies te gebruiken en deze werken meestal niet in de Kinsta-omgeving. PHP-sessies hebben ook andere veiligheidsimplicaties die moeten worden overwogen.
Als je code ziet met session_start
op jouw site, betekent dit dat er PHP-sessies gebruikt worden.
Veel plugin- en thema-ontwikkelaars zijn overgestapt op het gebruik van een combinatie van browser cookies en database-rijen (in de wp_options
tabel of hun eigen aangepaste tabel). Wanneer je sessie-gegevens nodig hebt, is dit de betere aanpak.
Neem gerust contact op met ons ondersteuningsteam als je aanvullende vragen hebt over PHP-sessies.
Samenvatting
Hopelijk weet je nu een beetje meer over hoe WordPress-cookies en PHP-sessies werken dan hiervoor. Cookies zijn momenteel wat de wereld doet draaien en zijn belangrijk voor vrijwel alles wat er gebeurt op een WordPress website. Van jou ingelogd houden, zorgen voor een soepele winkelwagen ervaring en zelfs er voor zorgen dat een pop-up venster gesloten blijft.
Heb je nog andere vragen over cookies? 🍪 Laat het ons weten in de reacties hieronder.
Laat een reactie achter