Einfacher Test, ob der Browser Cookies annimmt
Geschrieben von: Christian Koller 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üfungDa 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ßbemerkungASP 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. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Browsereigenschaften mit BrowserHawk 2000 bestimmen 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 |