Door Ard van Wiersum: Als ik dit tabblad waarin ik nu mijn bijdrage hier aan het typen ben sluit, blijf ik ingelogd. Dat heeft Security.nl zo voor mij geregeld.
Briolet heeft gelijk: de website kan helemaal niet zien of alle tabblad gesloten zijn geweest of niet. En een browser kan niet zien waar een cookie voor dient (dat is niet per se voor een login).
HTTP(S) is op zich een stateless protocol, wat wil zeggen dat elke request van de browser aan de server in beginsel gezien wordt als iets dat compleet los staat van alle andere requests, en dus geen mogelijkheid bevat voor de server om de reactie op de request aan te passen aan dingen die de bezoeker eerder heeft gedaan. Dat komt voort uit waar het oorspronkelijk voor diende: om openbare documentatie die op verschillende servers staat met hyperlinks naar elkaar te kunnen laten verwijzen, het is een toepassing voor gedistribueerde hypertext.
Cookies zijn daaraan toegevoegd om toch staat toe te kunnen voegen. Het kan (via persistente cookies die voor lange tijd bewaard worden) gebruikt worden om voorkeuren van gebruikers op te slaan zonder de server met die opslag te belasten, en het kan (via sessiecookies die net lang bewaard worden) gebruikt worden om de server te laten weten dat meerdere requests van dezelfde bezoeker afkomstig zijn, zodat de server in de request-afhandeling niet alleen kan reageren op de inhoud van de huidige request maar ook op wat eraan vooraf is gegaan. Technisch is het natuurlijk geen enkel probleem om een "sessie" tot in de oneindigheid te laten duren door er een expiratiedatum in de verre toekomst aan te koppelen. Daarom worden cookies zo dankbaar gebruikt voor tracking en profiling.
Een sessie op de webserver staat niet per se gelijk aan inloggen. Een webwinkel waar je zonder account iets kan kopen bijvoorbeeld zal ook voor een in eerste instantie nog anonieme bezoeker een winkelwagentje moeten kunnen bijhouden, en dat is niet te doen als de server niet kan zien dat meerdere requests bij dezelfde bezoeker horen. Dan is er al een sessie op de server en is er een sessiecookie nodig. Een login betekent voor de webbrowser eigenlijk helemaal niets, die ziet alleen dat er cookies zijn en het is de server die een inlogpagina laat voorafgaan aan het kunnen doen van dingen waarvoor je ingelogd moet zijn.
Voor sessiecookies, cookies zonder expiratiedatum of maximumleeftijd, is het op het niveau van de communicatieprotocollen niet aan de server maar aan de client (de browser) om te bepalen wanner die wordt verwijderd, waneer de sessie eindigt dus. Browsers doen dat in de praktijk als de browser wordt afgesloten. Een webserver zal typisch besluiten om een sessie na een periode van inactiviteit (geen requests) op te ruimen, wat de sessiecookie effectief doet vervallen. Bij toepassingen met een groot risico op misbruik (zoals online bankieren) zullen servers dat al na een paar minuten doen, bij minder kritische toepassingen kan er een langere inactiviteitsperiode worden aangehouden.
Browsers zijn duidelijk voorzichtig met het weggooien van cookies. Je kan in Firefox instellen dat persistente cookies (die waarvoor de server een expiratiedatum of maximum leeftijd heeft ingesteld) toch worden weggegooid als de browser wordt afgesloten, maar niet dat sessiecookies al worden weggegooid als je een tab afsluit. Ik snap die voorzichtigheid wel: het zijn instellingen waarmee websites mogelijk niet meer werken zoals een gebruiker verwacht, en mensen zitten nou eenmaal aan instellingen die ze niet snappen en weten daar vervolgens zelf niet meer uit te komen. Het is altijd de vraag hoe ver je gaat met geavanceerde dingen in de browser zelf in te bouwen, of het over te laten aan makers van add-ons zodat gebruikers die het wel snappen en willen het zelf kunnen toevoegen.
Ik gebruik de add-on
Cookie AutoDelete. Die kan je cookies en andere website-data laten verwijderen als (of een aantal seconden nadat) de laatste tab van een website gesloten wordt, of alternatief zodra (of een aantal seconden nadat) een domein in geen enkele tab meer voorkomt. Pas op met dat laatste: aanloggen met DigiD en betalen met iDEAL zijn uitstapjes naar een andere website, en er gaan dingen mis als je bij terugkeer naar de oorspronkelijke website je sessiecookie kwijt bent.