onsdag 27 maj 2009

Kom ihåg att ange en path för dina cookies!

Har du problem med mystiska dubbletter av cookies du skapat på en sajt dyker upp när du förväntar dig att de ska vara unika? Då kanske du gjort samma misstag som jag gjorde - missat att ställa in en path för varje cookie. Detta gäller oavsett om du använder dig av Javascript eller .NET-ramverkets WebBrowser-kontroll för att skapa cookies. Fixen är lyckligtvis mycket simpel.

Jag skulle häromdagen skapa en cookie i .NET WebBrowser-kontrollen via WebBrowser.Document.Cookies och gjorde så här (min WebBrowser-instans heter "browser" i exemplen nedan):
browser.Document.Cookies = "MyCookie=My value";

Den (interna) webbapplikation som browsern navigerade runt i kunde sedan verifiera att cookien fanns och göra vissa saker baserat på det, följt av att sätta cookien till ett annat värde. Det var bara det att ibland verkade cookien ha flera olika värden under samma request, vilket orsakade ett oönskat beteende. När jag tittade närmare på det insåg jag att det ibland fanns dubbletter av cookien. Vadan?

Jag började med att ägna en eftermiddag åt att testa olika varianter av "kolla-om-cookien-finns-i-så-fall-sätt-den-till-ditten-annars-sätt-den-till-datten-eller-ta-bort-den" och andra dumheter tills det var dags att gå hem för dagen med bultande huvudvärk och dåligt humör.

Nästa dag inledde jag istället med att googla efter typ "duplicate cookies" och hittade ett kort blogginlägg med budskapet:
Kom ihåg att alltid sätta path för dina cookies, annars defaultar den till den aktuella sidans URL vilket kan leda till dubbletter.
Inlägget handlade visserligen om att sätta cookies genom Javascript och document.cookies, men det är mer eller mindre precis samma sak som att göra det via WebBrowser.Document.Cookies. Så hur sätter man path för en cookie? En ny googling tog mig till en beskrivning av cookies på Quirksmode.org och insikten:
browser.Document.Cookies = "MyCookie=My value; path=/";

Genom det enkla tillägget började min cookie gälla för hela sajten och alla dubbletter försvann hux flux.

Slutsats: Sätt alltid path för dina cookies och ta en paus med lite frisk luft och kanske ett mellanmål när du försöker lösa ett problem men är för trött för att inse att Google har svaret...

Inga kommentarer:

Skicka en kommentar