Cookies, vad det är och hur man använder dem
Förord
För ett par dagar sedan fick jag ett antal frågor rörande cookies i chatten samtidigt som jag läste Mingos önskemål om en adressbok till sin iMail. Så jag tänkte ta tillfället i akt att skriva en artikel om Cookies och hur man kan använda sig av dem. I min bifogade applikation så har jag skapat en adressbok som använder sig av cookies. Nu är detta inte den ultimata lösningen på en adressbok, långt ifrån, men det är ett bra case, för utvecklare som är osäkra på hur cookies fungerar, att träna på.Innehåll
»»
»
»
»
»
»
»
Relaterade artiklar
Exempel på användningsområden för cookies:
Se hur adressboken fungerar - http://www.comaround.se/beta/cookies. Ni får ha överseende med layouten och funktionerna runt applikationen. De är är lite kantiga och inte fullständiga.
Cookies är små textfiler som skapas på användarens dator. Detta innebär att man kan spara information på klienten som servern kan nå utan att själv behöva komma ihåg denna information. Problemet med cookies är att de kan tas bort av användaren och vissa inte tillåter att cookies skrivs i sina webläsar-inställningar.
Att tänka på är att det är en ren textfil så alla som har tillgång till datorn läsa innehållet i den. Så spara inte information såsom användarID, lösenord eller annan känslig information i dem.
Du kan inte spara hur mycket information som helst i dem och du kan inte heller skapa hur många som helst. En cookie kan vara på max 4 Kb och du kan max skriva 20 cookies/domän/client.
I Request-objektet finns en kollektion, cookies, som används för att läsa värden från en cookie, som vi kallar på med följande kod:
Låt oss säga att vi har en cookie som lagrar användarens namn och att cookien heter userInfo. Vi börjar med en enkel cookie som endast har ett värde i sig.
För att läsa värdet i cookien och placera det i variablen userName så använder du denna kod:
Multipla värden
En cookie kan naturligtvis har flera värden, keys. Genom att använda dig att detta så har du möjligheten att spara mer än ett värde/cookie. Om vi jämför detta med ett recordset som har ett namn och som innehåller information som hämtas från ett fält i databasen. Du kallar på informationen genom att använda dig av recordsetets namn samt fältnamn för att få tag på värdet.
Multipla värden i cookies fungerar på samma sätt. Du anger namnet på cookien samt vilken key du vill arbeta med. Nedanstående kod läser värden från 3 keys som finns i cookien userInfo.
Vi läser informationen från userInfo-cookiens 3 keys som då heter userName, birthDay och gender.
Värden finns nu i variablerna userName, bDay och gender. Du kan nu arbeta med dessa variabler och göra vad du vill med dem.
För att skapa/skriva till en cookie så måste vi använda oss av Response-objektet som även det har en kollektion som heter Cookies.
Enligt dokumentationen så måste cookies skrivas innan HTTP-headern är skriven. Det innebär att koden för att skapa/läsa cookies måste finnas över . Detta gäller inte om du använder <%Response.Buffer = True%> som buffrar sidan tills att den är färdig för att sedan skicka den till klienten.
I senare versioner av ASP (läs ASP 3.0) så är Response.Buffer satt till True som standard och inte FALSE som på äldre versioner.
Detta innebär att på med ASP 3.0 så kan du använda din cookie kod över allt på sidan men varför skapa ett tillfälle för fel. Ta för vana att placera koden högst upp. Du kan ju alltid läsa in värden i lokala variabler (eller session-variabler) och använda dessa längre ner på sidan för att komma runt detta.
Om vi nu skulle fortsätta med det tidigare exemplet och skriva värden till cookien, userInfo, och dess keys.
Finns en cookie redan så kan du uppdatera informationen i den väldigt enkelt. Du gör precis som när du skapade en cookie. Det du gör är att du ändrar värdena i cookien. Vi satte värden i cookien userInfo i exemplet ovan. Om du vill ändra på ett värde (eller flera) så gör du så här:
Expires
En väldigt viktig egenskap är Expires. Den anger hur länge en cookie skall vara giltig. Anger vi inget värdet, datum, i Expires så kommer den att bli ogiltig när användaren stänger ner sin webläsare.
Märk att du måste ha # (brädhögar) runt datumet om du explicit anger ett datum.
Domain
Värdet du anger i denna egenskap specifierar på vilken domän som cookien kan läsas. Även om du inte anger ett värde här så sätts värdet i cookien till den domän som skrev cookien. Du kan alltså inte ange en annan domän. Om du inte skall använda dig av path-egenskapen så behöver du inte sätta något värde.
Vill du har information om hur du använder samma cookie på flera domäner så läs denna artikel.
Så om cookien endast skall läsas från domänen den skapades på så behöver du inte ange någon domain.
Path
Denna egenskap specifierar mer från var cookien kan läsas. Den använder värdet i domain-egenskapen.
Lämnar du denna blank så kan cookien läsas från alla sidor och undermappar. Om du vill exklusivt ange från vilka mappar och sidor en cookie genom att ange ett värde så måste du även ange ett värde i domain-egenskapen.
Secure
Om du anger True i denna egenskap så kan bara cookien användas om webläsaren använder Secure Sockets eller https://. Skrevs cookien under Secure Sockets eller https:// så sätts värdet automatiskt till True och vice versa om du inte anger något värde.
Bara för att du anger True i denna egenskap så innebär inte det att cookie blir mer säker än förut. Det är fortfarande en textfil som lagras på klientens dator.
För att undersöka om en specifik cookie finns så kan du göra på detta sätt.
Detta är också ett sätt för att undersöka om du kan skriva en cookie till klienten. Nackdelen är att det genereras ingen felkod om du inte kan skapa en cookie så det du får göra är att skapa en cookie för att sedan läsa den. Får du ett svar så tillåter klienten att du skriver cookies.
För att enkelt ta bort en cookie så anger du ett datum som har passerats i Expires egenskapen. Du kan även blanka värdena i cookien.
Tänk på följande när du använder cookies:
Jag bifogar filen som demon består av. Titta gärna på demon. Ni för modifiera den så att den passar just er lösning.
Håll utkik efter nästa artikel. Har ni några frågor så iMaila mig .
Vi hörs och syns
/Putte
- Spara när besökaren var här senast
- Spara använderspecifika inställningar såsom bakgrundsfärg, startsida med mera
- Del av shoppingsystem
- etc.
Se hur adressboken fungerar - http://www.comaround.se/beta/cookies. Ni får ha överseende med layouten och funktionerna runt applikationen. De är är lite kantiga och inte fullständiga.
Vad är en Cookie?
Cookies är små textfiler som skapas på användarens dator. Detta innebär att man kan spara information på klienten som servern kan nå utan att själv behöva komma ihåg denna information. Problemet med cookies är att de kan tas bort av användaren och vissa inte tillåter att cookies skrivs i sina webläsar-inställningar. Att tänka på är att det är en ren textfil så alla som har tillgång till datorn läsa innehållet i den. Så spara inte information såsom användarID, lösenord eller annan känslig information i dem.
Du kan inte spara hur mycket information som helst i dem och du kan inte heller skapa hur många som helst. En cookie kan vara på max 4 Kb och du kan max skriva 20 cookies/domän/client.
Läsa cookies
I Request-objektet finns en kollektion, cookies, som används för att läsa värden från en cookie, som vi kallar på med följande kod:
Syntax:
Request.Cookies(namn)
Låt oss säga att vi har en cookie som lagrar användarens namn och att cookien heter userInfo. Vi börjar med en enkel cookie som endast har ett värde i sig.
För att läsa värdet i cookien och placera det i variablen userName så använder du denna kod:
<%
Dim userName 'as String
userName = Request.Cookies("userInfo")
%>
Multipla värden
En cookie kan naturligtvis har flera värden, keys. Genom att använda dig att detta så har du möjligheten att spara mer än ett värde/cookie. Om vi jämför detta med ett recordset som har ett namn och som innehåller information som hämtas från ett fält i databasen. Du kallar på informationen genom att använda dig av recordsetets namn samt fältnamn för att få tag på värdet.
<%=rs("userName")%>
Multipla värden i cookies fungerar på samma sätt. Du anger namnet på cookien samt vilken key du vill arbeta med. Nedanstående kod läser värden från 3 keys som finns i cookien userInfo.
Syntax cookie med keys:
Response.Cookies(namn)(key)
<%
Dim userName 'as String
Dim bDay 'as Date
Dim gender 'as String
userName = Request.Cookies("userInfo")("userName")
bDay = Request.Cookies("userInfo")("birthDay")
gender = Request.Cookies("userInfo")("gender")
%>
Vi läser informationen från userInfo-cookiens 3 keys som då heter userName, birthDay och gender.
Värden finns nu i variablerna userName, bDay och gender. Du kan nu arbeta med dessa variabler och göra vad du vill med dem.
Skapa cookies
För att skapa/skriva till en cookie så måste vi använda oss av Response-objektet som även det har en kollektion som heter Cookies. Enligt dokumentationen så måste cookies skrivas innan HTTP-headern är skriven. Det innebär att koden för att skapa/läsa cookies måste finnas över . Detta gäller inte om du använder <%Response.Buffer = True%> som buffrar sidan tills att den är färdig för att sedan skicka den till klienten.
I senare versioner av ASP (läs ASP 3.0) så är Response.Buffer satt till True som standard och inte FALSE som på äldre versioner.
Detta innebär att på med ASP 3.0 så kan du använda din cookie kod över allt på sidan men varför skapa ett tillfälle för fel. Ta för vana att placera koden högst upp. Du kan ju alltid läsa in värden i lokala variabler (eller session-variabler) och använda dessa längre ner på sidan för att komma runt detta.
Om vi nu skulle fortsätta med det tidigare exemplet och skriva värden till cookien, userInfo, och dess keys.
Syntax cookie med keys:
Response.Cookies(namn)(key) = värde
<%
Response.Cookies("userInfo")("userName") = "Patrik Andersson"
Response.Cookies("userInfo")("birthDay") = "1944-06-06"
Request.Cookies("userInfo")("gender") = "Kille"
%>
Uppdatera cookies
Finns en cookie redan så kan du uppdatera informationen i den väldigt enkelt. Du gör precis som när du skapade en cookie. Det du gör är att du ändrar värdena i cookien. Vi satte värden i cookien userInfo i exemplet ovan. Om du vill ändra på ett värde (eller flera) så gör du så här:
<%
Response.Cookies("userInfo")("birthDay") = "1971-10-16"
%>
Egenskaper
ExpiresEn väldigt viktig egenskap är Expires. Den anger hur länge en cookie skall vara giltig. Anger vi inget värdet, datum, i Expires så kommer den att bli ogiltig när användaren stänger ner sin webläsare.
<%
Response.Cookies("userInfo).Expires = Now() + 7
'Eller
Response.Cookies("userInfo").Expires = #2002-03-25#
%>
Märk att du måste ha # (brädhögar) runt datumet om du explicit anger ett datum.
Domain
Värdet du anger i denna egenskap specifierar på vilken domän som cookien kan läsas. Även om du inte anger ett värde här så sätts värdet i cookien till den domän som skrev cookien. Du kan alltså inte ange en annan domän. Om du inte skall använda dig av path-egenskapen så behöver du inte sätta något värde.
Vill du har information om hur du använder samma cookie på flera domäner så läs denna artikel.
Så om cookien endast skall läsas från domänen den skapades på så behöver du inte ange någon domain.
<%
Response.Cookies("userInfo).Domain = "www.pellesoft.se"
%>
Path
Denna egenskap specifierar mer från var cookien kan läsas. Den använder värdet i domain-egenskapen.
Lämnar du denna blank så kan cookien läsas från alla sidor och undermappar. Om du vill exklusivt ange från vilka mappar och sidor en cookie genom att ange ett värde så måste du även ange ett värde i domain-egenskapen.
<%
Response.Cookies("userInfo).Path = "/en/sökväg/ner/till/vald/mapp/"
'För hela siten
Response.Cookies("userInfo).Path = "/"
%>
Secure
Om du anger True i denna egenskap så kan bara cookien användas om webläsaren använder Secure Sockets eller https://. Skrevs cookien under Secure Sockets eller https:// så sätts värdet automatiskt till True och vice versa om du inte anger något värde.
<%
Response.Cookies("userInfo).Secure = True
%>
Bara för att du anger True i denna egenskap så innebär inte det att cookie blir mer säker än förut. Det är fortfarande en textfil som lagras på klientens dator.
Finns cookien
För att undersöka om en specifik cookie finns så kan du göra på detta sätt.
<%
If Request.Cookies("userInfo) = "" Then
'cookien finns inte
Else
'cookien finns
End if
%>
Detta är också ett sätt för att undersöka om du kan skriva en cookie till klienten. Nackdelen är att det genereras ingen felkod om du inte kan skapa en cookie så det du får göra är att skapa en cookie för att sedan läsa den. Får du ett svar så tillåter klienten att du skriver cookies.
Ta bort en cookie
För att enkelt ta bort en cookie så anger du ett datum som har passerats i Expires egenskapen. Du kan även blanka värdena i cookien.
<%
Response.Cookies("userInfo).Expires = Now() -7
'Eller
Response.Cookies("userInfo").Expires = #2000-01-01#
'Eller
Response.Cookies("userInfo") = ""
%>
Avslutning
Tänk på följande när du använder cookies:- Alla accepterar inte cookies.
- Cookies kan tas bort av användaren.
- Cookies är vanliga textfiler som kan läsas av alla som har tillgång till datorn så spara ingen känslig information i dem.
Jag bifogar filen som demon består av. Titta gärna på demon. Ni för modifiera den så att den passar just er lösning.
Håll utkik efter nästa artikel. Har ni några frågor så iMaila mig .
Vi hörs och syns
/Putte
0 Kommentarer