Klockan :
 ASP, Grunderna - Session Variabler 2002-09-05 11:57:18 
 Information om författaren :
Namn : Jimmy Staff
Epost : admin@aspwebb.com
Hemsida : http://www.aspwebb.com
Presentation :
Ansvarig på ASPWebb!
 Meny :
Startsidan (www.aspwebb.com)
Artikelarkivet
Föregående sida
Utskriftsvänlig sida
Kommentera artikel

ASP, Grunderna - Session Variabler

Session variabler.

Denna artikeln lär dig allt du bör veta om Session, för att ta del av denna artikel bör du ha grundläggande kunskaper i ASP och användandet av Cookies och Variabler.

 

Tekniken

En session variabels styrka gentemot en vanlig variabel är att session variabeln överlever även om användaren byter sida på webbservern. Som du vet så försvinner vanliga variabler så fort en sida har laddats klart, detta leder till att det inte går att spara information som ska spänna sig över mer än en sida.

Detta löser Sessionvariabeln genom att lagra informationen som sessionvariabeln innehåller på servern och koppla denna variabel mot ett unikt nummer som varje användare får.

När du besöker en ASP sida så startar du en "Session", en användning utav sidan så att säga, du får omedvetet ett unikt nummer kopplat till dig och din webbläsare. Ett s.k. SessionID, som kan se ut ungefär så här 34567555.

 

Användningsområden

Du kanske undrar vad man ska med dessa variabler och informationen till? Några enkla exempel är

t ex Banksidor som skyddar alla sina sidor från obehöriga genom att ha koll på att rätt användare är inloggad. Ett annat klassiskt exempel är en webbshopp som lagrar kundkorgen så länge man är inne på sidan och handlar. Sen finns det så klart massor med andra användningsområden för en sessionvariabel.

 

Hur gör man?

Det är enkelt att skapa och använda sessionvariabler, på gott och ont. Man måste vara väl medveten om att det inte alltid är att föredra Sessionvariabler, men mer om det senare.

 

För att skapa en session skriver du så här :

<%
     Session("VariabelnsNamn") = Värde
%>

 

För att sedan t ex skriva ut detta värdet på sidan skriver man så här :

<%
    Response.Write(Session("VariabelNamn"))
%>

 

Simpelt va? För att skapa flera Sessions skriver man bara samma kod igen men med olika namn :

<%
     Session("Fnamn") = "Jimmy"
     Session("Enamn") = "Staff"
%>

 

Och för att skriva ut värdena (från vilken sida du vill på din webbplats) :

<%
     Response.Write(Session("Fnamn"))
     Response.Write(Session("Enamn"))
%>

 

När försvinner värdena?

Nu kanske du undrar om dessa variabler ligger kvar i all oändlighet? Nej det gör dom inte, så länge besökaren är aktiv på sidan så finns alla värdena kvar. Skulle dock användaren vara inaktiv eller ev. ha lämnat våran webbplats (genom att stänga webbläsaren eller klickat sig vidare till en annan server) försvinner dessa variabler för att spara plats i serverns minne. Detta sker oftast efter 20 minuter som är standardinställningen för sessionvariabelns Timeout. Eftersom webbservern aldrig vet vad en användare gör på sin dator så väntar den 20 minuter på att får höra av webbläsaren igen. Begärs ingen ny sida så glömmer alltså servern all information som var förknippad med just den användaren.

 

Om du vill ha längre eller kortare tid än dessa 20 minuterarna (default på IIS 5.0) så kan du ändra detta med följande kommando :

<%
     Session.Timeout = 30
%>

 

Det kommandot ändrar alltså hur många minuter servern ska minnas värdena, observera att denna kod måste skrivas före någon variabel skapas. T ex så här :

<%
    Session.Timeout = 15
    Session("Land") = "Sverige"
%>

 

Om en Session skapas före session.timeout körs så gäller standard inställningarna för just den sessionen.

Man kan genom att använda Session.Timeout med flera olika värden ha olika minutantal på en användares sessioner.

 

Kan man tvinga den att "Glömma"?

Ja du kan antingen skriva över sessionvariabeln med en ny som har samma namn och som innehåller ett tomt värde eller kanske något annat :

 

<%
    Session("Bil") = "Volvo"
    Session("Bil") = "BMW"

    Response.Write(Session("Bil"))
%>

Denna koden kommer alltså att skriva ut ordet BMW på hemsidan och glömma bort Volvo.

Det finns dock ett smidigare sätt att lösa detta på, Session.Abandon kommandot tömmer alla sessionvariabler som är kopplad till den specifike användaren.

 

<%
     Session.Abandon
%>

 

Hur ser man SessionIDet?

Ibland kan det vara bra att kunna se en användares sessionnummer, det gör du med följande kommando :

 

<%
     Response.Write(Session.SessionID)
%>

 

Testa att köra denna sida några gånger och stäng ner webbläsaren mellan varje besök, då kommer du märka att numret ökar med ett för varje besök.

 

Finns det nackdelar?

Ja det finns en hel del saker man ska tänka på innan man använder en session, om möjligt ska man undvika sessioner. Det första problemet man kan stöta på är när användare utan stöd för Cookies besöker sidan, det är nämligen så att det unika SessionIDet måste lagras på användarens dator.

Detta för att webbservern ska kunna ha ordning på alla besökarna och vilka variabler som hör till vem. Detta löser ASP genom att lagra ID numret i en cookie på besökarens sida. Nekar då webbläsaren våran sida till detta så slås session användningen ut för just den användaren. Alla sessionvariabler förblir tomma och inget sparas. Det finns lösningar på detta i form utav ett ISAPI-filter från Microsoft, problemet bara är att det sänker prestandan avsevärt på webbservern.

Nästa nackdel är att Session variabler fort kan ta en stor del utav webbserverns minne, tänk dig följande :

Du öppnar sidan Kl 12:00 och har 2 sessionvariabler på startsidan med en timeout på 60 minuter.

Inom 10 minuter har du fått 100 besökare på sidan vilket resulterar i 200 variabler i minnet (2 * 100), tänk dig då att du har en jämn ström med besökare på 600 st i timmen. Detta resulterar i att minst 1200 variabler ligger i minnet hela tiden.

Det som talar emot Sessioner är att varje gånge en sida laddas måste webbservern läsa av cookien på användarens dator, detta leder till att det tar lite längre tid att öppna sidan.

 

Går session att stängas av?

Ja du kan stänga av möjligheten att använda sessionvariabler genom att ändra inställningarna för din webbserver :

 

Som du ser så kan man även ändra standard inställningen för session.timeout.

 

För att stänga av Sessioner på bara en enskild sida använder du följande kod i toppen av asp-sidan :

<%@ ENABLESESSIONSTATE=False %>

 

Om du har stängt av Sessions på webbservern kan du undgå denna inställning på vissa sidor genom att använda samma kod fast värdet True :

<%@ ENABLESESSIONSTATE=True %>

 

För att lära dig mer om sessions så rekommenderar jag att du testar lösenordsövningen som använder sessions för att fungera.

 

Lycka till!

 © 2010 Staff consulting - Jimmy Staff