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.

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 de reactie cookies opt-in in te schakelen
Hoe de reactie cookies opt-in in te schakelen

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.

wp_woocommerce_sessions tabel
wp_woocommerce_sessions tabel

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’.

Cookies die gebruikt worden
Cookies die gebruikt worden

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).

WordPress Cookies
WordPress Cookies

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.

Accepteer Cookies
Accepteer Cookies

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.

Cookie instellingen
Cookie instellingen

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.

PHPSESSID HTTP cookie
PHPSESSID HTTP cookie

Je kunt dit ook zien in de HTTP header voor een website.

HTTP header met ingesteld PHPSESSID cookie
HTTP header met ingesteld PHPSESSID cookie

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.

Brian Jackson

Brian heeft een enorme passie voor WordPress, gebruikt het al meer dan tien jaar en heeft zelfs al aantal premium plugins ontwikkeld. Brian houdt van bloggen, films en hikes. Kom in contact met Brian op Twitter.