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

Einfacher Test, ob der Browser Cookies annimmt

Geschrieben von: Christian Koller
Kategorie: ASP Tricks

This printed page brought to you by AlphaSierraPapa

Das Problem ist vielen Programmieren bekannt: Man benutzt Session Variablen und kann sich nie sicher sein, daß der Browser des Benutzers auch den zugehörigen Sessioncookie annimmt. Akzeptiert der Browser den Cookie nicht, so kann man für den Benutzer keine Werte in Session Variablen speichern. Ohne Session Variablen zu benutzen ist zum Beispiel die Implementation eines abgesicherten Bereiches einer Website nur mit sehr viel Aufwand möglich.

Oftmals ist es notwendig, für den Fall, daß der Browser keine Cookies akzeptiert, einen alternative Inhalt der HTML-Seite zum Browser zu schicken, die an die Gegebenheiten und Möglichkeiten des Browsers angepasst ist.

Wie kann nun ein ASP Skript erkennen, ob der Browser Cookies annimmt?

Die elegante Möglichkeit, nämlich eine serverseitige Komponente wie BrowserHawk 2000 zu benutzen, habe ich schon in den Artikeln Prüfen ob ein Browser Cookies annimmt und Browsereigenschaften mit BrowserHawk 2000 bestimmen erwähnt.

Aber wenn Sie am Server keine Komponente zur Verfügung haben, gibt es auch einen Weg, um mit reinem ASP zu erkennen, ob der Browser Cookies annimmt.

Implementation der Prüfung

Da eine Session Variable nur dann gespeichert bleibt, wenn der Browser Cookies annimmt, kann man auch den umgekehrten Weg gehen: Einen Wert in einer Session Variablen speichern, zu einer neuen ASP Seite gehen, und dort prüfen, ob der Wert noch immer in der Session Variablen gespeichert ist. Ist dies der Fall, so akzeptiert der Browser Cookies.

Wie dies auf ein und der selben Seite geprüft werden kann, zeigt das folgende Skript:

 1: <% @Language=VBScript %>
 2: <% 
 3: ' Pruefen, ob bereits ein Redirect vorangegangen ist:
 4: strRedirect = Request.QueryString("Redirect")
 5: If UCase(strRedirect) <> UCase("True") Then
 6:    ' Es hat noch kein Redirect stattgefunden,
 7:    ' die Seite ist erst aufgerufen worden.
 8: 
 9:    ' Wert in einer Session Variable speichern
10:    Session("CookiesEnabled") = True
11: 
12:    ' Redirect zur selben Seite machen
13:    strSeite = Request.ServerVariables("SCRIPT_NAME")
14:    ' Querystring an die URL anhaengen um zu kennzeichnen,
15:    ' dass die Seite via Redirect aufgerufen wurde:
16:    strQueryString = "Redirect=True"
17:    strURL = strSeite & "?" & strQueryString
18:    Response.Redirect(strURL)
19:    Response.End
20: Else
21:    ' Es hat ein Redirect stattgefunden.
22:    ' Pruefen, ob der Wert in der Session Variablen
23:    ' noch immer gespeichert ist.
24:    bSessionWert = Session("CookiesEnabled")
25:    If bSessionWert = True Then
26:       bCookies = True
27:    Else
28:       bCookies = False
29:    End If
30: End If 
31: 
32: ' den Wert in bCookies benutzen, um Aktionen zu setzen:
33: If bCookies = True Then
34:    Response.Write("<font color=""Green"">Ihr Browser " & _
35:       "nimmt Cookies an.</font>")
36: Else
37:    Response.Write("<font color=""Red"">Ihr Browser " & _
38:       "nimmt keine Cookies an.</font>")
39: End If
40: %>

Sie können das Script auch hier testen. Der Sourcecode des Scripts kannn downgeloadet werden (siehe Link am Fuß des Artikels).

Was macht das Script im einzelnen? Es speichert in Zeile 10 einen Wert in einer Session Variablen, ruft sich selbst in Zeile 18 mittels Response.Redirect auf, und prüft anschliessend in Zeile 24 bis 29, ob der in der Sessionvariablen gespeicherte Wert noch immer vorhanden ist.

Der Trick dabei ist, daß beim Redirect an die URL ein QueryString (Redirect=True) gehängt wird, der sozusagen als Marker dient, daß das Script gerade via Redirect aufgerufen wird. Der QueryString wird in den Zeilen 16 und 17 an die URL des Skripts selbst gehängt, bevor in Zeile 18 der Redirect erfolgt.

Bei jedem Aufruf prüft nun das Script, ob bereits ein Redirct erfolgt ist. Dazu liest es, auf gut Glück, den Wert des QueryStrings aus und speichrt ihn in der Variablen strRedirect in Zeile 4. Wenn kein QueryString in der URL vorhanden ist, weil das Script eben das erste Mal aufgerufen wurde, dann enthält die Variable strRedirect nur einen Leerstring. Ist das Script jedoch via redirect aufgerufen worden, so enthält die Variable strRedirect den Wert "True".

Wird das Script also das erste Mal aufgerufen, so werden die Zeilen 6 bis 19 ausgeführt, ein Wert in der Session Variablen Session("CookiesEnabled") gespeichert, die URL des Scripts in Zeile 13 mittles Request.ServerVariables("SCRIPT_NAME") ermittelt, ein QueryString an die URL angehängt um den Redirect zu kennzeichnen, und anschließend das Skript nochmals aufgerufen.

Wird das Script nun via Redirect aus Zeile 18 aufgerufen, so werden die Zeilen 21 bis 29 ausgeführt: Die Session Variable Session("CookiesEnabled") wird ausgelesen und ihr Wert in der Variablen bSessionWert gespeichert. Enthält die Session Variable den Wert True weil der Browser Cookies annimmt, so wird der Wert der Variablen bCookies auf True gesetzt, um zu kennzeichnen, daß der Browser Cookies annimmt. Falls die Session Variable keine Wert enthält weil der Browser keine Cookies annimmt, so wird die Variable bCookies auf False gesetzt.

Den Wert der Variablen bCookies kann man dann im weiteren Script benutzen, um jeweils darauf zu reagieren, ob der Browser Cookies annimmt oder nicht, wie das im Script in den Zeilen 32 bis 39 exemplarisch ausgeführt ist.

Es ist noch anzumerken, daß das Script noch verbessert werden kann. So könnte man zum Beispiel schon vor der Zeile 3 prüfen, ob die Session Variable Session("CookiesEnabled") den Wert True enthält. Ist dies der Fall, so weiß man, daß die Session Variable in einer anderen Seite oder einem früheren Seitenaufruf gesetzt wurde und der Browser daher Cookies annimmt!

Schlußbemerkung

ASP Seiten, die Session Variablen benutzen, sind darauf angewiesen, daß der Browser den Session Cookie annimmt und speichert. Um keine falschen Annahmen darüber zu treffen, ob der Browser Cookies annimmt oder nicht, empfiehlt sich in jeder ASP Seite, die Session Variablen oder Cookies benutzt, zu prüfen, ob der jeweilige Browser tatsächlich Cookies annimmt.

Diese Prüfung läßt sich in reinem ASP implementieren, indem man eine Session Variable setzt, eine Redirect zum selben ASP Script ausführt und anschließend prüft, ob der Wert noch immer in der Session Variablen gespeichert ist.

Wenn der Browser Cookies annimmt, so ist der Wert auch nach dem Redirect in der Session Variable vorhanden, und das Script "weiß", daß es getrost darauf vertrauen kann, daß Session Variablen auf über ASP Seiten hinweg erhalten bleiben.

This printed page brought to you by AlphaSierraPapa

Download des Codes

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

Verwandte Artikel

Browsereigenschaften mit BrowserHawk 2000 bestimmen
http:/www.aspheute.com/artikel/20000410.htm
Cookies in Flash mittels ASP manipulieren
http:/www.aspheute.com/artikel/20000908.htm
Dynamische Stylesheets
http:/www.aspheute.com/artikel/20010306.htm
Neue Inhalte einer Web Site für den Benutzer hervorheben
http:/www.aspheute.com/artikel/20010509.htm
Prüfen ob ein Browser Cookies annimmt
http:/www.aspheute.com/artikel/20000412.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.