ASP - sessieobject


Een Session-object slaat informatie op over of wijzigt instellingen voor een gebruikerssessie.


Het Session-object

Wanneer u met een toepassing op uw computer werkt, opent u deze, brengt u enkele wijzigingen aan en sluit u deze vervolgens. Dit lijkt veel op een sessie. De computer weet wie je bent. Het weet wanneer u de toepassing opent en wanneer u deze sluit. Op internet is er echter één probleem: de webserver weet niet wie je bent en wat je doet, omdat het HTTP-adres zijn status niet behoudt.

ASP lost dit probleem op door voor elke gebruiker een unieke cookie aan te maken. De cookie wordt naar de computer van de gebruiker gestuurd en bevat informatie die de gebruiker identificeert. Deze interface wordt het Session-object genoemd.

Het Session-object slaat informatie op over of wijzigt instellingen voor een gebruikerssessie.

Variabelen die zijn opgeslagen in een Session-object bevatten informatie over één enkele gebruiker en zijn beschikbaar voor alle pagina's in één applicatie. Algemene informatie die is opgeslagen in sessievariabelen zijn naam, id en voorkeuren. De server maakt een nieuw Session-object voor elke nieuwe gebruiker en vernietigt het Session-object wanneer de sessie verloopt.


Wanneer begint een sessie?

Een sessie start wanneer:

  • Een nieuwe gebruiker vraagt ​​om een ​​ASP-bestand en het Global.asa-bestand bevat een Session_OnStart-procedure
  • Een waarde wordt opgeslagen in een sessievariabele
  • Een gebruiker vraagt ​​een ASP-bestand aan en het bestand Global.asa gebruikt de tag <object> om een ​​object met sessiebereik te instantiëren

Wanneer eindigt een sessie?

Een sessie eindigt als een gebruiker een pagina in de applicatie gedurende een bepaalde periode niet heeft opgevraagd of vernieuwd. Standaard is dit 20 minuten.

Als u een time-outinterval wilt instellen dat korter of langer is dan de standaardwaarde, gebruikt u de eigenschap Timeout .

In het onderstaande voorbeeld wordt een time-outinterval van 5 minuten ingesteld:

<%
Session.Timeout=5
%>

Gebruik de Abandon- methode om een ​​sessie onmiddellijk te beëindigen:

<%
Session.Abandon
%>

Opmerking: het grootste probleem met sessies is WANNEER ze zouden moeten eindigen. We weten niet of het laatste verzoek van de gebruiker het laatste was of niet. We weten dus niet hoe lang we de sessie "levend" moeten houden. Te lang wachten op een inactieve sessie verbruikt bronnen op de server, maar als de sessie te vroeg wordt verwijderd, moet de gebruiker helemaal opnieuw beginnen omdat de server alle informatie heeft verwijderd. Het vinden van het juiste time-outinterval kan moeilijk zijn!

Tip: sla alleen KLEINE hoeveelheden gegevens op in sessievariabelen!



Sessievariabelen opslaan en ophalen

Het belangrijkste van het Session-object is dat je er variabelen in kunt opslaan.

In het onderstaande voorbeeld wordt de gebruikersnaam van de sessievariabele ingesteld op "Donald Duck" en de variabele leeftijd van de sessie op "50":

<%
Session("username")="Donald Duck"
Session("age")=50
%>

Wanneer de waarde is opgeslagen in een sessievariabele, kan deze worden bereikt vanaf ELKE pagina in de ASP-toepassing:

Welcome <%Response.Write(Session("username"))%>

De regel hierboven retourneert: "Welkom Donald Duck".

U kunt gebruikersvoorkeuren ook opslaan in het Session-object en vervolgens toegang krijgen tot die voorkeur om te kiezen welke pagina u naar de gebruiker wilt terugsturen.

Het onderstaande voorbeeld specificeert een tekstversie van de pagina als de gebruiker een lage schermresolutie heeft:

<%If Session("screenres")="low" Then%>
  This is the text version of the page
<%Else%>
  This is the multimedia version of the page
<%End If%>

Sessievariabelen verwijderen

De Contents-collectie bevat alle sessievariabelen.

Het is mogelijk om een ​​sessievariabele te verwijderen met de methode Remove.

In het onderstaande voorbeeld wordt de sessievariabele "sale" verwijderd als de waarde van de sessievariabele "age" lager is dan 18:

<%
If Session.Contents("age")<18 then
  Session.Contents.Remove("sale")
End If
%>

Gebruik de RemoveAll-methode om alle variabelen in een sessie te verwijderen:

<%
Session.Contents.RemoveAll()
%>

Loop door de inhoudsverzameling

De Contents-collectie bevat alle sessievariabelen. U kunt door de inhoudsverzameling bladeren om te zien wat erin is opgeslagen:

<%
Session("username")="Donald Duck"
Session("age")=50

dim i
For Each i in Session.Contents
  Response.Write(i & "<br>")
Next
%>

Resultaat:

username
age

Als u het aantal items in de Contents-verzameling niet weet, kunt u de eigenschap Count gebruiken:

<%
dim i
dim j
j=Session.Contents.Count
Response.Write("Session variables: " & j)
For i=1 to j
  Response.Write(Session.Contents(i) & "<br>")
Next
%>

Resultaat:

Session variables: 2
Donald Duck
50

Loop door de StaticObjects-collectie

U kunt door de StaticObjects-collectie lopen om de waarden te zien van alle objecten die zijn opgeslagen in het Session-object:

<%
dim i
For Each i in Session.StaticObjects
  Response.Write(i & "<br>")
Next
%>