Cookies i ASP
Förord
Som Ni säkert känner till är en cookie en textfil som lagras på besökarens lokala hårddisk. En cookies maximala storlek uppgår till maximalt 4 kB. Dess huvudsakliga syfte är att lagra användarspecifik information såsom exempelvis besöksID, senaste besök på websiten, antal besök på densamma o dyl. Cookies är inte avsett för eller bör inte användas för att lagra statisk och viktig information utan sådan data bör lagras på servern i textfiler eller i en databas. I denna artikel tänkte jag visa några korta exempel hur man skriver cookies till användarens PC, läser cookies, modifierar och tar bort cookies i ASP. Jag har även skrivit ett exempel för motsvarande i JavaScript
Att skriva cookies
I nedanstående exempel skapas en cookie med namnet "LastVisit". Naturligtvis måste besökarens webbläsare vara inställd på att acceptera cookies.
<%
Response.Cookies("LastVisit") = Date & " " & Time
Response.Cookies("LastVisit").Expires = DateAdd("d", 10, Date)
%>
Skapa en cookie
En Cookie har skapats
Vad som händer i första kodraden är att det skrivs en cookie med namnet LastVisit som tilldelas värdet med aktuellt datum och tid (t ex 2001-04-04 11:45). Den andra raden bestämmer livslängden på cookien dvs hur länge den skall finnas tillgänglig på besökarens dator. Sätts inget värde så kommer kakan att försvinna så fort sessionen avslutas (webbläsaren stängs ned). I exemplet ovan har jag med hjälp av metoden DateAdd sett till att kakan överlever i 10 dagar från det datum då användaren besökte siten senast. Man kan också med följande metod explicit bestämma vilket datum kakan skall upphöra.
<%
Response.Cookies("LastVisit").Expires = # April 1, 2001 #
%>
Att uppdatera cookies
När en cookies en gång har skapats är det enkelt att uppdatera den med nya värden. Om vi stannar kvar vid den cookie som vi nyss har skapat så kan den uppdateras med senaste datum och tid med nedanstående kod.
<%
Dim blNewCookie 'As Boolean
blnNewCookie = (Request.Cookies("LastVisit") = "")
Response.Cookies("LastVisit") = Date & " " & Time
Response.Cookies("LastVisit").Expires = DateAdd("d", 10, Date)
%>
Uppdatera en cookie
<%
If blnNewCookie Then
%>
En cookie har skapats.
<%
Else
%>
En cookie har blivit uppdaterad.
<%
End If
%>
Värde: <% Response.Write Request.Cookies("LastVisit") %>
Att ta bort cookies
Om du vill ta bort en cookie från besökarens dator så tilldelar du aktuell cookie en nollängdssträng. Då tvingar du webläsaren att ta bort kakan från besökarens hårddisk.
<%
Response.Cookies("LastVisit") = ""
%>
Radera en cookie
En cookie har blivit raderad.
Värde: <% Response.Write Request.Cookies("LastVisit") %>
Att hantera cookies i JavaScript
Om du inte har tillgång till något webhotell men ändå vill kunna skriva cookies på besökarens dator finns det även utmärkta JavaScriptmetoder att tillgå. I exemplet nedan beräknas antalet besök på din websida. Eftersom JavaScript exekveras på klienten så visas bara antalet besök som gjorts på just den dator besökaren sitter vid. I det inledande exemplet deklareras först variabler och sedan tilldelas dessa redigerbara värden.
var expAfterDays = 30;
var CookieTotal = "TotalVisits";
var CookieToday = "TodayVisits";
var TotalInit = 0;
var SessionInit = 0;
var visitsToday = 0;
var visitsTotal = 0;
var exp = new Date();
exp.setTime(exp.getTime() + (expAfterDays*24*60*60*1000));
Sedan måste vi ha en rad olika funktioner. Alla funktioner måste läggas i HEAD-taggen i HTML-dokumentet.
Först definierar vi en funktion som räknar besöken på sajten.
function countVisit()
{
var buf = "";
buf = GetCookie(CookieTotal);
if (buf == null)
visitsTotal = TotalInit;
else
visitsTotal = parseInt(buf);
visitsTotal++;
buf = GetCookie(CookieToday);
if (buf == null)
visitsToday = TotalInit;
else
visitsToday = parseInt(buf);
visitsToday++;
SetCookie(CookieTotal,visitsTotal,exp);
SetCookie(CookieToday,visitsToday);
}
En funktion som visar antalet besökare är också nödvändig. Denna funktion skall senare anropas från BODY-taggen.
function displayTotalVisits(Text1, Text2)
{
var Text ="";
var buf = GetCookie(CookieTotal);
if (buf == null)
countVisit();
else
visitsTotal = parseInt(buf);
Text += Text1 + visitsTotal + Text2;
document.write(Text);
}
Följande funktioner hämtar upp aktuell cookie med dess värde under förutsättning att en sådan existerar.
function getCookieVal (offset) {
var endstr = document.cookie.indexOf (";", offset);
if (endstr == -1)
endstr = document.cookie.length;
return unescape(document.cookie.substring(offset, endstr));
}
function GetCookie (name) {
var arg = name + "=";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen) {
var j = i + alen;
if (document.cookie.substring(i, j) == arg)
return getCookieVal (j);
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return null;
}
Sedan skriver vi in cookiens nya värde till besökarens hårddisk:
function SetCookie (name, value) {
var argv = SetCookie.arguments;
var argc = SetCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;
document.cookie = name + "=" + escape (value) +
((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
((path == null) ? "" : ("; path=" + path)) +
((domain == null) ? "" : ("; domain=" + domain)) +
((secure == true) ? "; secure" : "");
}
Slutligen implementeras en funktion som raderar kakan:
function DeleteCookie (name) {
var exp = new Date();
exp.setTime (exp.getTime() - 1);
var cval = GetCookie (name);
document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
}
Nu när vi har färdigställt de nödvändiga funktionerna vill vi ju använda dessa på något vis. I BODY-taggens Load-händelse anropar vi funktionen CountVisit() för att läsa in cookien som lagrar värdet för antalet besök.
BODY onLoad ="countVisit()"
Sedan vill vi förstås visa resultatet för användaren:
displayTotalVisits(" ", " ");
Filer att tanka
Fil 1: cookies_asp.zipFil 2: cookies_javascript.zip
Var denna artikeln användbar?
Om du gör någon intressant (eller kanske något konstigt fel) på grund av detta material så skicka gärna det med ett mail eller bifoga en länk till mig så presenterar jag detta som ytterligare exempelfiler för kursen. Om detta innehållet är felaktigt eller du lärt dig fler finesser så skriv gärna en rad eller varför inte en egen kurs baserat på dina erfarenheter. Sänd gärna in dina tips till denna artikel./Staffan Berg
0 Kommentarer