Die Benutzung von Cookies in ASP-Applikationen
Eine ASP-Applikation, die Cookies benutzt
6
Tracking von HTTP-Sessions mit Hilfe von Cookies
HTTP ist ein Protokoll ohne festen Status. Obwohl es diese Tatsache einfach macht, Informationen zu verteilen, erschwert es Web-Applikationen, HTTP-Sessions aufzuzeichnen, abzuspeichern bzw. zu erkennen und Informationen über mehrere Sessions hinweg beizubehalten. Cookies wurden entwickelt, um diese Misere zu mindern bzw. ganz zu beseitigen. Wenn ein Web-Server einen HTTP-Request empfängt, so wird dieser bearbeitet und im Anschluß die Verbindung zwischen Web-Server und Client-Browser terminiert. Es werden nach dieser Prozedur jedoch keine Informationen über die stattgefundene Transaktion für weitergehende Arbeiten abgespeichert. Diese Tatsache stellt ein großes Hindernis für gewisse Web-Applikationen, beispielsweise im Bereich Shopping, dar, die Informationen über mehrere Sessions und Verbindungen hinweg vorhalten müssen. Abbildung 6.1 zeigt ein Beispiel einer typischen HTTP-Transaktion. Sie veranschaulicht, was mit Informationen einer HTTP-Transaktion nach einer unterbrochenen Verbindung zwischen Web-Server und Web-Client geschieht.
Abbildung 6.1: |
Abbildung 6.2 demonstriert, wie ein Cookie benutzt wird, um Informationen über mehrere HTTP-Sessions oder Verbindungen zu behalten. Eine ASP-Applikation erstellt ein Cookie mit der Bezeichnung "Repeat=Yes". Eine Server- oder Client-seitige Applikation ist in der Lage, ein Cookie zu finden, das mitteilt, ob der Web-Client sich zum wiederholten Mal auf der entsprechenden Web-Seite befindet.
Abbildung 6.2: |
Cookies können benutzt werden, um komplexe Web-Applikationen zu entwickeln, die Informationen über mehrere HTTP-Sessions zu behalten. Abbildung 6.3 ist ein Beispiel dafür, wie Cookies benutzt werden können, um dem Anwender bei der Suche nach Informationen behilflich zu sein. Innerhalb der Web-Site aus Abbildung 6.3 kann der Anwender Informationen über Kinofilme finden, die in verschiedenen Gebieten der USA laufen. Um zu erfahren, welche Filme im Gebiet des Web-Surfers laufen, muß er lediglich seine Postleitzahl eingeben. Da es ärgerlich ist, diese immer wieder einzugeben, speichert ein Cookie diese Information auf der Client-Seite ab, so daß die Postleitzahl nicht immer wieder neu eingegeben werden muß.
URL: Statten Sie doch der folgenden Web-Seite einen Besuch ab, um zusätzliche Informationen über Client-seitige Cookies zu erhalten und zu erfahren, wie diese funktionieren: http://home.netscape.com/newsref/std/cookie_spec.html |
Abbildung 6.3: |
Es gibt verschiedene Arten von Cookie-Applikationen. Folgende Informationen können zwischen verschiedenen Sessions mit Hilfe von Cookies beibehalten werden:
In einem folgenden Kapitel werden Sie näheres dazu erfahren, wie Cookies in ASP-Applikationen benutzt werden, um Informationen über mehrere Requests zu speichern.
Das Internet wird mehr und mehr dazu benutzt, um Geschäftstransaktionen durchzuführen. Online-Einkaufswagen benutzen Cookies, um aufzuzeichnen, welche Waren sich aus dem Katalog bereits im Einkaufswagen befinden (siehe Abbildung 6.4).
Ein Cookie wird jedesmal dann aktualisiert, sobald der Internet-Besucher eine spezielle Ware ausgesucht und in den Einkaufskorb gelegt hat. Hat der Anwender seinen virtuellen Einkaufsbummel beendet, untersucht die Einkaufswagen-Applikation die Cookie-Informationen, die auf Grund des Einkaufsbummels aufgezeichnet wurden. Nachdem die Waren verifiziert wurden, kann der Kunde sie bezahlen (siehe Abbildung 6.5)
Abbildung 6.4: |
Abbildung 6.5: |
Anwenderbezogene Web-Seiten
Anwenderbezogene Web-Seiten können dynamisch erstellt werden, um den Web-Surfer mit personalisierten Informationen zu empfangen. Diese Art von Web-Seiten geben ein professionelles Äußeres, das die Attraktivität einer Web-Site erheblich steigert.
Die Microsoft Network Homepage, die Möglichkeit zur personalisierten Darstellung von Web-Seiten bietet, sehen Sie in Abbildung 6.6.
URL: Besuchen Sie doch mal die MSN-Homepage auf dem Microsoft Web-Server, um einen Einblick in die Welt der personalisierten Web-Seiten zu erhalten: |
Abbildung 6.6: |
ie personalisierten Kategorien der MSN-Homepage ersehen Sie aus Abbildung 6.7. Bevor Sie jetzt daran gehen, Ihre eigene Startseite für die MSN-Homepage zu erstellen, sollten Sie die Option zur Warnung vor Cookies aktivieren. Wählen Sie dazu aus dem Menü View den Menüeintrag Options innerhalb des Microsoft Internet Explorers. Wählen Sie jetzt die Registerkarte Advanced aus (siehe Abbildung 6.8). Aktivieren Sie auf dieser Registerkarte die Checkbox Warn before accepting "cookies" aus.
Abbildung 6.7: |
Abbildung 6.8: |
Nachdem diese Checkbox aktiviert wurde, haben Sie die Möglichkeit, die Übertragung von Cookies auf Ihren Rechner zu kontrollieren und im Falle eines Falles abzulehnen (siehe Abbildung 6.9). Das Cookie aus Abbildung 6.9 wird erstellt, sobald Sie das erste Mal die MSN-Homepage besuchen.
Abbildung 6.9: |
Die Abbildung 6.10 zeigt die personalisierte Web-Seite mit den jeweiligen bevorzugten Interessengebieten des Web-Surfers. Hier erkennen Sie die Unterschiede zwischen der Standardseite und der angepaßten Version.
Abbildung 6.10: |
Obwohl Client-seitige Cookies mächtige Werkzeuge zur Entwicklung von anspruchsvollen Web-Applikationen sind, gibt es eine Menge von Nachteilen bei der Verwendung von Cookies. Es wichtig, daß Sie über diese Nachteile Bescheid wissen.
Cookies können verlorengehen
Cookies, die wichtige Daten enthalten, können verlorengehen. Derartige Informationen sollten immer innerhalb einer Server-seitigen Datenbank abgespeichert werden. Cookies werden jedoch standardmäßig auf der Festplatte des Clients abgespeichert und sind im Normalfall (bei Verwendung des Internet Explorers) im Unterverzeichnis Cookies von Windows NT (beispielsweise c:\WINNT\Cookies) zu finden (siehe Abbildung 6.11). Der Netscape Communicator speichert Cookies in der Datei bookmark.html ab.
Cookies-Dateien können beschädigt, gelöscht oder überschrieben werden, wenn Sie eine neue Version eines Web-Browsers installieren. Sollten Sie im Verlauf Ihrer Web-Site-Programmierung auf Cookies setzen, so berücksichtigen Sie den Fall des Verlustes von Cookies. Präventive Maßnahmen, die diesen Bereich abdekken, werden zu einem späteren Zeitpunkt erläutert.
Abbildung 6.11: |
Cookies können vom Anwender verändert werden
Technisch bewanderte Anwender sind in der Lage, die Werte eines Cookies zu modifizieren. Gehen Sie niemals davon aus, daß Cookie-Informationen authentisch sind - eine Manipulation ist jederzeit möglich. Sollten Sie ein Cookie benutzen, um die Zeit des letzten Besuches festzustellen, so ist es in Ordnung, sich dabei auf ein Cookie zu beziehen. Es ist jedoch keine gute Idee, mittels eines Cookies festzustellen, welche User-Accounts ein Anwender hat, da diese verändert worden sein könnten.
Cookies sollten - wenn möglich - niemals sicherheitsrelevante Informationen enthalten. Sollten Sie es jedoch für notwendig erachten, vertrauliche Informationen zu speichern, so tun Sie dies mittels Server-basierenden Datenbanken, und versehen Sie die Informationen mit einem Benutzernamen und einem Paßwort. Speichern Sie die Identifaktions-Daten in einem Client-seitigen Cookie, daß des Anwender nach einem Paßwort befragt, bevor eine Transaktion über den Internet stattfinden soll.
Cookies sind nicht einmalig. Es ist möglich, daß zwei Computer exakt das gleiche Cookie beherbergen können. Benutzen Sie niemals Cookies, um Informationen zu speichern, die computerspezifisch sind (Bildschirmauflösung, Farbtiefe, Betriebssystem etc.).
Cookies sind nicht vor Diebstahl sicher
Wie im vorigen Absatz angedeutet wurde, ist es möglich, Cookie-Informationen zu kopieren. Diese Tätigkeit kann auch ohne Wissen des Eigentümers durchgeführt werden, was einem Cookie-Diebstahl gleichkommt.
Sie sollten einen Anwender niemals nur auf Basis eines Cookies authentifizieren. Benutzen Sie ein Paßwort, um einen User zu identifizieren. |
Der Internet Explorer und Netscape Navigator unterstützen Client-seitige permanente Cookies. Obwohl beide Browser über 95% aller im Einsatz befindlichen Web-Browser abdecken, benutzen einige Internet-Surfer Browser, die keine Cookies unterstützen. Diese Einschränkung sollten Sie bei der Erstellung von Web-Seiten und Web-Applikationen beachten. Es ist eine technische Herausforderung, auch diesen Anwendern einen vernünftigen Zugriff auf entsprechende Web-Sites zu gewährleisten.
Die Umgehung der Nachteile von Cookies
Wie bereits erwähnt, können Cookie-Informationen verlorengehen oder verändern werden. Eine Lösung dieses Problems stellt die Speicherung wichtiger Daten (User-Name, Paßwort etc.) in einer Server-seitigen Datenbank dar. Die Server-seitige Datenbank beherbergt eine Referenz der Daten, die das Client-seitige Cookie besitzt, die im »Ernstfall« wieder hergestellt werden können.
Stellen Sie sicher, daß Sie jedem Anwender aus Bestätigungsgründen ein Paßwort zugewiesen haben. Diese Maßnahme verhindert weitgehend, die mißbräuchliche Benutzung von gestohlenen Cookies.
Die Benutzung von Cookies in ASP-Applikationen
Es ist sehr einfach, Cookies in ASP-Applikationen einzubinden. Diese Applikationen benutzen die Objekte Response und Request, um Cookies zu manipulieren.
Das Response-Objekt findet Anwendung, um ein Cookie zu erstellen und dessen Attribute zu setzen. Wende Sie bitte folgende Syntax an:
Response.Cookies (NameOfCookie) = ValueOfCookie
Benutzen Sie immer ASP-Statements am Script-Anfang, um Cokies zu erstellen. Cookies sollten erstellt werden, bevor HTML-Text zum Browser gesendet wird. |
NameOfCookie ist der Name des Cookies, welches erstellt werden soll. Existiert bereits ein Cookie mit der Bezeichnung, so wird es mit den neuen Werten versehen. ValueOfCokie ist der Wert, der dem Cookie zugewiesen werden soll. Die folgende Befehlszeile erstellt ein Cookie mit der Bezeichnung "TimeZone" und dem Wert "Eastern":
Response.Cookies("TimeZone") = "Eastern"
Das Setzen der Attribute eines Cookies
Cookies sind in der Lage, verschiedene Attribute zu enthalten. Dazu zählen beispielsweise Informationen, wie lange das Cookie seine Gültigkeit behalten soll oder zu welcher Domäne es Zugriff haben soll. Die Attribute können unter Zuhilfenahme der folgenden Syntax modifiziert werden:
Response.Cookies(NameOfCookie).CookieAttribute = ValueOfCookieAttribute
NameOfCokie ist der Name des Cookies, dessen Attribute verändert werden sollen. CookieAttribute ist das Attribut, das durch einen anderen Wert ersetzt werden soll.
Tabelle 6.1 beschreibt die Attribute, die ein Cookie haben kann
Tabelle 6.1: Cookie-Attribute
Name |
Beschreibung |
Dieses Attribut gibt an, bis zu welchem Datum das Cookie aktiv sein darf. Das Attribut ist write-only. | |
Dieser Wert gibt an, zu welcher Domäne das Cookie versendet wird (write-only). | |
Dieses Attribut beschreibt den ursprünglichen Pfad, über den sich das Cookie auf die Reise begibt. Die Standardeinstellung ist der Pfad zur ASP-Applikation. Auch hierbei handelt es sich um ein write-only-Attribut. | |
Gibt an, ob das Cookie sicher ist (write-only). | |
Dieses Attribut eines Cookies gibt Auskunft darüber, ob zusätzliche Keys definiert wurden (read-only). |
.
Das folgende ASP-Statement erstellt ein Cookie mit der Bezeichnung »TimeZone« und dem Wert »Eastern« sowie dem Verfallsdatum 29. Februar 2000:
Response.Cookies("TimeZone") = "Eastern"
Response.Cookies("TimeZone").Expires = "February 29, 2000"
Das Auffinden von Cookie-Werten
Das Request-Objekt ist in der Lage, Werte eines Cookies zu empfangen. Das folgende ASP-Statement empfängt den Wert des Cookies NameOfCookie:
Request.Cookies(NameOfCookie)
Bevor Sie auf den Wert eines Cookies zugreifen, müssen Sie mittels des Attributs HasKeys sicherstellen, daß diese auch vorhanden sind. Dazu benötigen Sie die nachfolgende Syntax:
Request.Cookies(NameOfCookie)(NameOfSubKey)
Sie haben die Möglichkeit, auf einfache Weise festzustellen, ob ein Cookie sogenannte Werte bzw. Subkeys enthält. Ist das Resultat der Operation TRUE besitzt das Cookie Subkeys, wenn nicht, erhalten Sie ein FALSE.
Request.Cookies(NameOfCookie).HasKeys
Um den Wert des Cookies »NameOfCookie« zu erhalten, müssen Sie folgende Syntax verwenden:
Request.Cookies("NameOfCookie")
Eine ASP-Applikation, die Cookies benutzt
Die Applikation aus Listing 6.1 demonstriert, wie eine ASP-Applikation die Objekte Response und Request benutzt, um Informationen zwischen verschiedenen Sessions zu behalten. Client-seitige Cookies finden Anwendung, die feststellen, wie oft ein Anwender die ASP-Applikation schon aufgerufen hat. Die Web-Seite aus Abbildung 6.12 wird aufgerufen, sobald ein Anwender die ASP-Applikation das erste Mal aufruft.
Listing 6.1: Der Einsatz von Cookies, um Informationen zwischen HTTP-Sessions zu behalten
1: <%@ LANGUAGE="VBSCRIPT" %>
2:
3: <% LastAccessTime = Request.Cookies ("LastTime") %>
4: <% LastAccessDate = Request.Cookies ("LastDate") %>
5:
6: <%
7: If (Request.Cookies ("NumVisits")="") Then
8: Response.Cookies ("NumVisits") = 0
9: Else
10: Response.Cookies ("NumVisits") = Request.Cookies ("NumVisits")
+ 1
11: End If
12: %>
13:
14: <% Response.Cookies ("LastDate") = Date %>
15: <% Response.Cookies ("LastTime") = Time %>
16:
17: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
18: <html>
19:
20: <head>
21: <meta http-equiv="Content-Type"
22: content="text/html; charset=iso-8859-1">
23: <meta name="GENERATOR" content="Microsoft FrontPage 2.0">
24: <title>Using Cookies In ASP Applications</title>
25: </head>
26:
27: <body bgcolor="#FDFFA4">
28:
29: <p><font size="4" face="Arial"><STRONG>
30: Welcome to the dynamic and personalized world of ASP
31: application development with client-side persistent cookies!
32: </STRONG></font></p>
33:
34: <p>When you access this Web page, three cookies are created. The
35: first cookie counts the number of times you have visited this Web
36: page. The other two cookies are used to determine the date and
37: time you last visited this Web page.</p>
38: <div align="center"><center>
39:
40: <table border="4" width="300">
41: <tr>
42: <td>
43: <CENTER>
44: <% IF (Request.Cookies ("NumVisits")=0) THEN %>
45:
46: <font color="#0000FF" face="Comic Sans MS">
47: Welcome!<br>
48: This is the first time you are visiting this Web page!
49: </font><br>
50:
51: <% ELSE %>
52:
53: <p><font color="#400000" size="4"><strong>
54: Thanks for visiting this Web page again! You have
55: visited this Web page a total of
56: <%= Request.Cookies ("NumVisits") %> time(s).
57: </strong></font></p>
58:
59: <% END IF %>
60: </CENTER>
61: </td>
62: </tr>
63: </table>
64: </center></div>
65:
66: <hr>
67:
68: <p>
69: <font color="#FF0000" size="4" face="Comic Sans MS"><strong>
70:
71: The Current time is <%= Time %> on <%= Date %> <BR>
72:
73: <% IF (Request.Cookies ("NumVisits")>0) THEN %>
74:
75: You last accessed this Web page
76: at <%= LastAccessTime %>
77: on <%= LastAccessDate %>
78:
79: <% END IF %>
80: </strong></font>
81:
82: <HR>
83:
84: <A HREF="/ASP/Chapter-06/DeleteCookies.asp">
85: Select this link to delete all cookies created for this page</A>
86:
87: </p>
88: </body>
89: </html>
Abbildung 6.12: |
Sobald die Applikation aus Listing 6.1 zum zweiten Mal vom gleichen Anwender aufgerufen wird, erhält dieser die aus Abbildung 6.13 ersichtliche Bildschirmausgabe.
Der Hyperlink, der in den Zeilen 84 und 85 des Listings 6.1 definiert wird, zeigt auf eine ASP-Applikation in Listing 6.2. Die Zeilen 3 bis 5 des Listings 6.2 löschen das Cookie, das von der Applikation aus Listing 6.1 erstellt wurde. Nachdem das Cookie gelöscht wurde, erscheint die in Abbildung 6.14 dargestellte Bildschirmausgabe.
Abbildung 6.13: |
Listing 6.2: Die ASP-Applikation, welche die Cookies aus Listing 6.1 löscht
1: <%@ LANGUAGE="VBSCRIPT" %>
2:
3: <% Response.Cookies ("NumVisits").Expires = "January 1, 1997" %>
4: <% Response.Cookies ("LastDate").Expires = "January 1, 1997" %>
5: <% Response.Cookies ("LastTime").Expires = "January 1, 1997" %>
6:
7: <HTML>
8: <HEAD>
9: <META NAME="GENERATOR" Content="Microsoft Visual InterDev 1.0">
10: <META HTTP-EQUIV="Content-Type" content="text/html;
charset=iso-8859-1">
11: <TITLE>Cookies Are Deleted</TITLE>
12: </HEAD>
13: <BODY BGCOLOR="FFFFFF">
14:
15: <H1>Cookies Are Deleted</H1>
16:
17: <A HREF="/ASP/Chapter-06/Cookie.asp">
18: Click here to start over</A>
19:
20: </BODY>
21: </HTML>
Abbildung 6.14: |
Zusammenfassung
Cookies finden ihr Anwendungsgebiet in der Entwicklung von komplexen Web-Applikationen, die Informationen über mehrere HTTP-Sessions hinweg beibehalten. Wenn ein Cookie erstellt wird, werden verschiedene Informationen in einem Cookie auf dem Rechner des Users gespeichert. Diese auf dem Rechner des Clients gespeicherten Cookies können von Client- oder Server-basierenden Web-Aplikationen genutzt werden. Von der Möglichkeit der Speicherung von HTTP-Requests über mehrere Sessions hinweg profitieren insbesondere Applikationen, beispielsweise im Bereich des Shoppings über das Internet.
Was kommt als nächstes?
In diesem Kapitel lernten Sie die Fähigkeiten von Cookies kennen, um die Nachteile des HTTP-Protokolls zu überwinden. Cookies eröffnen Ihnen eine neue Ebene in Sachen Interaktivität zwischen Client und Server. Im nächsten Kapitel lernen Sie mehr über dynamische und personalisierte Web-Applikationen, die Client-seitige Cookies verwenden.
Fragen und Antworten
Frage:
Welches ASP-Objekt ist für die Erstellung eines Cookies verantwortlich?
Antwort:
Das Response-Objekt erstellt ein Cookie.
Frage:
Welche ASP-Objekt ist in der Lage, Werte eines Cookies zu empfangen?
Antwort:
Das Request-Objekt kann Daten eines Cookies auslesen.
Frage:
Welches ASP-Statement ist notwendig, um ein Cookie mit der Bezeichnung »EMailAddress« zu löschen?
Antwort:
A Response.Cookie("EmailAddress").Expires = "January 1, 1997"
Aufgaben
1. Modifizieren Sie die Applikation aus Listing 6.1 so, daß Sie Ihren eigenen Text und Ihre eigenen Hintergrundfarben wählen.
2. Modifizieren Sie die Applikation aus Listing 6.1 so, daß ein eigener Text-Font zur Verfügung steht.
3. Modifizieren Sie die Applikation aus Listing 6.1 in dem Maße, daß Sie den Namen des Users feststellen, ihn in einem Cookie abspeichern und anschließend mit einer persönlichen Grußbotschaft empfangen.
Ein Imprint des Markt&Technik Buch- und Software-Verlag GmbH.