Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Session Variablen - Verwendung und Stolpersteine

Geschrieben von: Christian Koller
Kategorie: ASP Grundlagen

This printed page brought to you by AlphaSierraPapa

Session Variablen kommen dort zur Anwendung, wo man für einen einzelnen Benutzer während seines Besuches der Website (=Session) Werte speichern will. So kann man zum Beispiel einen sogenannten Warenkorb einer E-Commerce Applikation, mit allen Waren (Produkt, Menge und Preis) in einer oder mehreren Session Variablen speichern. Der Warenkorb bleibt so erhalten und kann in jeder ASP-Seite abgefragt werden, egal über wieviele Seiten der User surft.

Personalisierte Seiten sind ein weiteres Anwendungsgebiet. Dabei kann der User, je nach implementierten Möglichkeiten, vom Hintergrundbild, der Schriftfarbe bis zu Ihm genehmen Inhalten einer ASP Applikation (und der darin befindlichen ASP-Seiten) alles einstellen. Die Einstellungen werden oft der Einfachheit halber in Session Variablen gespeichert, um von jeder besuchten ASP-Seite des Webservers aus lesbar zu sein. Somit kann jede ASP-Seite auf die Wünsche des Users reagieren und entsprechend ausgegeben werden.

Eine weitere und sehr wichtige Verwendung von Session Variablen ist die Absicherung von ASP-Seiten, die nur befugten Usern (oder Mitgliedern) nach einer Authentifizierung (mittels Usernamen und Passwort) zugänglich gemacht werden.

Was sind Session Variablen?

Wenn ein bestimmter User ASP-Seiten besucht, so bekommt sein Browser für die Dauer des Besuches vom Webserver (Internet Information Server oder Personal Web Server) einen sogenannten Session-Cookie zugeschickt, der für die Dauer des Besuches im Speicher des Browsers verbleibt (wird nach dem Schließen des Browser gelöscht). Unter diesem Cookie kann man sich eine kleine Textinformation vorstellen, die aus dem Cookie-Namen und dem Cookie-Wert besteht. Der Cookie-Name eines Session Cookies beginnt dabei für gewöhnlich mit ASPSESSIONID.

Dieser Cookie wird in den HTTP Headers mitgeschickt, und kann wie folgt aussehen (IIS5):

Set-Cookie: ASPSESSIONIDQQGGQRAE=NBDPJLDAEHJFAOCHDGDFKFIL; path=/

Zu diesem Session Cookie wird analog für jeden User am Webserver ein eigenes Session Objekt angelegt. Dieses Session Objekt speichert unter anderem alle Session Variablen, die von ASP-Seiten während des Besuches des Users gesetzt und gelesen werden können. Jedesmal wenn der User eine ASP Seite des Webservers besucht, liest der Webserver den Session Cookie, um den User identifizieren zu können. Ist kein Session Cookie gesetzt, so wird ein neuer Cookie zum Browser geschickt und das zugehörige Session Objekt am Webserver angelegt.

Wenn der User für eine bestimmte Zeitspanne (Session Timeout genannt) keine ASP-Seite des Webservers besucht, dann wird sein Session Objekt und alle darin gespeicherten Session Variablen gelöscht. Das Löschen des Session Objektes kann natürlich auch explizit in einer ASP-Seite durch Aufruf des Befehles Session.Abandon erfolgen.

Natürlich hat dieses Verfahren einen großen Nachteil: Einige Browser lassen sich so konfigurieren, daß sie keine Cookies annehmen. Dann verweigern sie natürlich auch das Speichern des Session Cookies. Das bedeutet aber, daß der Browser vom Webserver nicht identifiziert werden kann und mit dem Aufruf jeder ASP Seite ein neues Session Objekt angelegt wird. Daher steht beim Besuch der nächsten ASP Seite ein früher angelegtes Session Objekt für diesen Besucher nicht mehr zur Verfügung.

Verwendung von Session Variablen

Die Verwendung möchte ich zuerst anhand des Syntax, und später mit Hilfe eines Beispieles erklären.

Prinzipiell setzt man den Wert einen Session Variablen auf folgende Weise:

Session("Session_Variable_Name") = Wert

Der Wert kann ein einfacher Wert (Zahl, String, Text, Datum) aber auch ein Array oder sogar ein Objekt sein. Als Namen für die Session Variable (Session_Variable_Name) können Sie jeden zusammenhängenden String ohne Sonderzeichen benutzen.

Um den Wert wieder aus der Session Variable auszulesen verwendet man den folgenden Syntax:

Variable = Session("Session_Variablen_Namen")

Nun zu einem Beispiel, in dem wir einen Passwortschutz für ASP-Seiten mittels Session Variablen implementieren.

Passwortgeschützte Bereiche implementieren

Um einige ASP Seiten vor unbefugtem Zugriff zu schützen, muß sich jeder User mit Benutzernamen und Passwort identifizieren.

Wenn der Benutzter sich erfolgreich eingeloggt hat, so wird eine Session Variable gesetzt, die den Benutzernamen des Users enthält. Wenn der User nun eine geschützte ASP-Seite aufruft, so wird geprüft, ob die Session Variable einen Benutzernamen enthält. Falls kein Benutzername in der Session Variablen gespeichert ist (weil der User sich nicht eingeloggt hat), so wird er zur Login Seite umgeleitet.

Folgende Scripts sind an der Implementierung des Paßwortschutzes beteiligt:

Login Script (login.asp)

Das Login-Script besteht aus einem HTML-Formular, in das der User seinen Benutzernamen und sein Passwort eingibt, und dem Script, das prüft, ob die Kombination Benutzername/Paßwort gütlig ist und dann entsprechend in Session("Benutzername") den Usernamen speichert oder nicht.

<%
' Pruefen, ob der Benutzer das HTML-Formular abgesendet hat
If Request.Form("Absenden") = "" Then
   ' HTML-Formular nicht abgesendet, daher Formular anzeigen
   %>
<form action="<%= Request.ServerVariables("SCRIPT_NAME") %>" method="POST">
Benutzername:  
	<input type="Text" name="Benutzername" size="20" maxlength="20"><br>
Paßwort: 
	<input type="Password" name="Passwort" size="20" maxlength="20"><br>
	<input type="Submit" name="Absenden" value="Einloggen">
</form>
	<%
Else
   strBenutzername = Trim(Request.Form("Benutzername"))
   strPasswort = Trim(Request.Form("Passwort"))
   ' Identifizierung des Users, hier nur als If Abfrage implementiert
   If strBenutzername = "Benutzer" And strPasswort = "ASP4you&me" Then
      ' Benutzernamen und Passwort gueltig, daher User einloggen
      Session("Benutzername") = strBenutzername
	  Response.Write "Login erfolgreich.<br><br>"
	  Response.Write "<a href=""seite1.asp"">Zur ersten Seite</a>"
   Else
      ' Benutzername und Passwort nicht gueltig, daher kein Einloggen
      Response.Write  strBenutzername & " " & strPasswort & "<br>"
      Response.Write "Sie konnten nicht eingeloggt werden!"
   End If
End If
%>

Das hier vorliegende Loginscript ist simpel gehalten, es gibt nur einen Benutzernamen: Benutzer (Passwort ASP4you). Für eine Real-World Lösung würde man eine Datenbanktabelle mit Logins verwenden.

Schutz-Script (security.asp)

In jeder ASP-Seite des geschützen Bereiches wird dann mit Hilfe des Schutz-Scripts geprüft, ob der User eingeloggt ist. Diese Datei muß am Seitenanfang jeder zu schützenden Seite inkludiert werden.

<%
' Pruefen, ob der User eingeloggt ist
If Session("Benutzername") = "" Then
   ' User ist nicht eingeloggt, daher zur Login Seite names login.asp schicken
   Response.Redirect "login.asp"
   Response.End
End If

' Ab hier nur fuer eingeloggte User sichtbar:
Response.Write "Willkommen im paßwortgeschützten Bereich!<br>" & VbCrLf
%>

...

Ich habe bereits früher erwähnt, daß, wenn der Benutzer im Browser keine Cookies akzeptiert, je Zugriff eine neue Session gestartet wird, also nach login.asp der Wert von Benutzername wieder verloren ist. Damit kann sich der Benutzer niemals erfolgreich einloggen - also sollte man ihm sagen, daß er Cookies einschalten muß. Wie man prüfen kann, ob der Browser (Session) Cookies akzeptiert, ist ausführlich im Artikel "Prüfen ob ein Browser Cookies annimmt" erklärt.

Zu guter letzt

Auch um sich mit dem Session Objekt vertraut zu machen gilt:   Je öfter man es benutzt und einsetzt, desto vertrauter wird man mit der Materie und den Problemen oder Fehlern die auftreten können.

Auf ASP-Seiten, die auf das Session Objekt und Session Variablen verzichten können, ist es ratsam, den sogenannten Session State außer Funktion zu setzen. Dies entlastet den Webserver und geschieht für jede ASP-Seite einzeln mit Hilfe der folgenden @-Direktive, die ganz am Anfang der ASP-Seite stehen muß:

<% @ ENABLESESSIONSTATE = False %>

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000505.zip

Verwandte Artikel

Übergeben von Informationen von einer ASP-Seite zur nächsten
http:/www.aspheute.com/artikel/20000529.htm
@-Direktiven auf ASP Seiten
http:/www.aspheute.com/artikel/20000405.htm
Auswertung von HTML Formularen mit ASP
http:/www.aspheute.com/artikel/20000406.htm
Benutzerverwaltung leicht gemacht: Teil 1
http:/www.aspheute.com/artikel/20020429.htm
Erstellung eines Intranets in ASP (Teil 2) - Setup
http:/www.aspheute.com/artikel/20010918.htm
Global.asa: Verwendung, Events und Probleme
http:/www.aspheute.com/artikel/20001018.htm
Prüfen ob ein Browser Cookies annimmt
http:/www.aspheute.com/artikel/20000412.htm
Session State bei parallelen Browser-Frames und Fenstern
http:/www.aspheute.com/artikel/20000830.htm
Sicherheitsaspekte bei der Gestaltung von ASP Sites ohne Cookies
http:/www.aspheute.com/artikel/20010601.htm
Strukturierter Aufbau in der ASP-Programmierung
http:/www.aspheute.com/artikel/20011112.htm
Wieviele User sind online?
http:/www.aspheute.com/artikel/20010529.htm

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.