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

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Session Variablen - Verwendung und Stolpersteine

Geschrieben von: Christian Koller
Kategorie: ASP Grundlagen

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: Dient auf der Login-Seite dazu den Benutzernamen und das Paßwort des Users abzufragen, auf Gültigkeit zu prüfen, und gegebenenfalls die Session Variable Benutzername zu setzen.
  • Schutz-Script: Wird am Beginn jeder Paßwort geschützten Seite inkludiert (eingebaut) um zu prüfen, ob die Session Variable Benutzername einen Wert enthält oder nicht. Sollte die Session Variable keinen Wert enthalten, so ist der User nicht eingeloggt und somit nicht berechtigt, die Seite zu sehen. Er wird zur Login-Seite umgeleitet.

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 %>

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Übergeben von Informationen von einer ASP-Seite zur nächsten
@-Direktiven auf ASP Seiten
Auswertung von HTML Formularen mit ASP
Benutzerverwaltung leicht gemacht: Teil 1
Erstellung eines Intranets in ASP (Teil 2) - Setup
Global.asa: Verwendung, Events und Probleme
Prüfen ob ein Browser Cookies annimmt
Session State bei parallelen Browser-Frames und Fenstern
Sicherheitsaspekte bei der Gestaltung von ASP Sites ohne Cookies
Strukturierter Aufbau in der ASP-Programmierung
Wieviele User sind online?

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©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.