Session Variablen - Verwendung und Stolpersteine
Geschrieben von: Christian Koller 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 VariablenDie 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 implementierenUm 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 letztAuch 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 CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Übergeben von Informationen von einer ASP-Seite zur nächsten 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.
©2000-2006 AspHeute.com |