Die Werte von Cookies sind viel komplexer als die anderer ASP-Sammlungen wie Form und ServerVariables. Ein Cookie ist ein kleines Textstück, das vom Browser auf dem Client-System gespeichert und bei jeder Anfrage an den Server in der Domäne gesendet wird, für die es gilt.
ASP erleichtert die Anwendung von Cookies. Sie können alle mit der Anfrage gesendeten Cookie-Werte aus der Cookies-Sammlung des Request-Objekts abrufen und über die Cookies-Sammlung des Response-Objekts Cookies erstellen oder ändern und an den Benutzer zurücksenden Objekt.
Cookies enthalten Informationen, die auf zwei Arten erstellt werden können. Einwertige Cookies stellen ihre Werte dem Code über eine allgemeine ASP-ähnliche Sammlung zur Verfügung. Allerdings kann jedes Mitglied einer Sammlung selbst eine Sammlung sein, und Cookies, die diese Informationen enthalten, werden als Mehrwertcookies bezeichnet.
Das Erstellen eines Cookies mit einem Wert ist relativ einfach und geht folgendermaßen vor:
Response.Cookies("item-name") = "item-value"
Um ein Cookie mit mehreren Werten zu erstellen, können Sie den folgenden Befehl verwenden:
Response.Cookies("item -name" )("sub-item-name") = "sub-item-value"
legt die Domäne und den Pfad der Cookie-Anwendung sowie deren Gültigkeitsdauer fest. Wir verwenden:
Response.Cookies("item-name").domain = „Domain-URL“
Response.Cookies(„item-name“).path = „virtual-path“
Response.Cookies("item-name").expires = #date#
Normalerweise sendet der Client das Cookie nur mit der Anfrage an den Server, wenn er eine Anfrage für eine Seite in dem Verzeichnis stellt, in dem das Cookie erstellt wurde. Durch Angabe des Pfadattributs können Sie angeben, wo auf der Site dieses Cookie gültig ist und das Cookie mit der Anfrage gesendet wird. Wenn das Cookie mit Seitenanfragen für die gesamte Website gesendet wird, legen Sie den Pfad auf „/“ fest.
Wenn das Expires-Attribut nicht gesetzt ist, wird das Cookie automatisch gelöscht, wenn die aktuelle Browserinstanz geschlossen wird.
Beachten Sie, dass das Cookie bereits erstellt wird, wenn wir eine Ausgabe an den Browser senden. Denn diese Cookies sind Teil des HTTP-Headers der Seite.
In ASP 3.0 ist die Pufferung standardmäßig aktiviert und es wird keine Ausgabe gesendet, es sei denn, Response.Flush wird verwendet, um dies anzugeben, oder die Seite hat das Ende erreicht. Das bedeutet, dass sich der Code, der das Cookie erstellt, an einer beliebigen Stelle auf der Seite befinden und ausgeführt werden kann, bis eine Ausgabe an den Client „gespült“ wird.
Um vorhandene Cookies zu lesen, verwenden Sie die Request.Cookies-Sammlung. Auf die darin enthaltenen Elemente kann individuell zugegriffen werden, ähnlich wie bei der Methode, mit der sie erstellt wurden.
StrSingleValue = Request.Cookies("item-name")
StrSubItemValue = Request.Cookies("item-name")("sub-item-name")
Beachten Sie, dass die Request.Cookies-Sammlung (wie alle anderen Request-Sammlungen) schreibgeschützt ist. Die Response.Cookies-Sammlung ist schreibgeschützt. Tatsächlich können Sie auf die Namen einer Reihe von Cookies in dieser Sammlung zugreifen, nicht jedoch auf deren Werte.
Durchlaufen der Cookies-Sammlung
Um die Cookies-Sammlung bequemer nutzen zu können, können Sie das zusätzliche Attribut Haskeys verwenden. Wenn das Cookie, auf das zugegriffen wird, selbst eine Sammlung ist, also ein mehrwertiges Cookie, wird True zurückgegeben. Mithilfe der Haskeys-Eigenschaft können Sie die gesamte Request.Cookies-Sammlung durchlaufen, um eine Liste aller Cookies und ihrer Werte zu erhalten.
Für jedes objItem in Request.Cookies
Wenn Request.Cookies(objItem).HasKey Dann
'Verwenden Sie ein anderes For Each, um alle Unterschlüssel zu iterieren
Für jeden objItemKey in Request.Cookies(objItem)
Response.Write objItem & „(“ & objItemKey & „) = „_
& Request.Cookies(objItem)(objItemKey) & „<BR>“
Nächste
Anders
'Drucken Sie die Cookie-Zeichenfolge wie gewohnt aus
Response.Write objItem & „ = “ & Request.Cookies(objItem) & „<BR>“
Ende wenn
NextThis
ist dem vorherigen komplexen Code sehr ähnlich, der mehrere Werte aus der Request.Form-Sammlung extrahiert. Sie können hier jedoch das Haskeys-Attribut verwenden, um festzustellen, ob es sich bei jedem Eintrag um eine Menge handelt. Im Formularbeispiel muss die Eigenschaft „Request.Form(item_name).Count“ abgefragt werden, da die Mitglieder der Formularsammlung (und aller anderen Sammlungen außer Cookies) keine echten Sammlungen sein können. ASP übernimmt lediglich die Arbeit „hinter den Kulissen“ und ermittelt den Wert jeder Sammlung mit mehreren Einträgen.
Unterschiede zwischen Form und QueryString
Nachdem Sie die Techniken für den Zugriff auf verschiedene ASP-Sammlungen verstanden haben, muss eine weitere Frage gelöst werden: Was ist der Unterschied zwischen Form- und QueryString-Sammlungen? Wenn Sie ASP verwenden, sollten Sie sich zweifellos über diesen Unterschied im Klaren sein, aber Sie müssen sich auf die Funktionsweise von HTTP beziehen, um sie erneut zu verstehen und zu verstehen.
Es gibt zwei allgemeine Methoden zum Anfordern einer Seite oder einer anderen Ressource von einem Webserver über HTTP. Sie können die GET-Methode verwenden, um die Ressource direkt abzurufen, oder Sie können POST verwenden, um den Wert an die entsprechende Ressource zu übergeben. Die GET-Methode ist die Standardeinstellung. Sie können sich weiter oben in diesem Kapitel ein Beispiel für eine HTTP-Anfrage ansehen:
7/8/99 10:27:16 Sent GET /Store/Download.asp HTTP/1.1
Wenn Sie ein oder mehrere Paare setzen Namen Wenn der /-Wert an die URL der angeforderten Seite angehängt wird, wird er zur angeforderten Abfragezeichenfolge und wird der ASP-Seite in der QueryString-Sammlung bereitgestellt. Wenn Sie auf einen Hyperlink auf einer Webseite, einer E-Mail-Nachricht oder einem anderen Dokument klicken, die Adresse in die Adressleiste des Browsers eingeben und die Eingabetaste drücken oder im Browser auf die Schaltfläche „Links“ oder „Favoriten“ klicken, wird die GET-Methode verwendet.
Daher besteht die einzige Möglichkeit, bei diesen Aktionen Werte an ASP zu übergeben, darin, die QueryString-Sammlung zu verwenden und die Werte an die URL anzuhängen.
Werte, die in der Request.QueryString-Sammlung erscheinen und auf die zugegriffen wird, funktionieren auf die gleiche Weise wie die Form-Sammlungsinstanz, die wir zuvor gesehen haben. Eine Kombination aus URL und Abfragezeichenfolge:
http://mysite.com/process_page.asp?FirstName=Priscilla&LastName=Descartes
Auf den in der QueryString-Sammlung bereitgestellten Wert kann wie folgt zugegriffen werden:
strFirstName = Request.QueryString("FirstName") 'Return „Priscilla“
strLastName = Request.QueryString("LastName") 'Return „Descartes“
strRaw = Request.QueryString
'Gibt „FirstName=Priscilla&LastName=Descartes“
GET- und POST-Methoden des Formulars zurück.
Wenn Sie das <FORM>-Segment auf einer Seite verwenden, können Sie den METHOD-Attributwert des geöffneten FORM-Tags auf „GET“ oder „POST“ setzen Der Standardwert ist „GET“. Wenn „GET“ verwendet oder sein Attribut weggelassen wird, bindet der Browser diesen Wert an alle Steuerelemente auf der Seite, wird zu einer Abfragezeichenfolge und wird an die URL der angeforderten Seite angehängt.
Wenn diese Anfrage beim Webserver ankommt, wird ihr Wert von der Request.QueryString-Sammlung von ASP bereitgestellt. Wenn Sie jedoch das METHOD-Attribut auf „POST“ setzen, verpackt der Browser den Wert in den HTTP-Header des sendenden Servers und stellt ihn ASP über die Request.Form-Sammlung bereit.
Die POST-Methode kann übrigens in allen HTML-Formularen verwendet werden. Allerdings gibt es bestimmte Einschränkungen hinsichtlich der URL-String-Länge des Browsers oder Servers. Daher kann das Anhängen langer Zeichenfolgen zu einem Überlauf und zum Abschneiden einiger Zeichenfolgenzeichen führen. Gleichzeitig erscheint die Abfragezeichenfolge in der Adressleiste des Browsers und in allen gespeicherten Links und Favoriten. Darüber hinaus werden unerwünschte Werte in der HTTP-Anfrage beim Durchlaufen des Webservers offengelegt und können auch in den Protokolldateien Ihres Servers und anderer Routing-Server auftauchen. Werte in HTTP-Anfrageheadern sind selten sichtbar und erscheinen nicht in Protokolldateien.
Ein kleines Problem bei der Verwendung der POST-Methode besteht darin, dass beim erneuten Herunterladen des <FORM> durch den Benutzer die Werte des Formulars nicht mehr beibehalten werden und ihre Werte leer sind und erneut eingegeben werden müssen. Wenn der Wert jedoch an eine URL angehängt wird, wird er als Link gespeichert und erscheint daher in allen Anfragen, in denen die URL mit der Zeichenfolge kombiniert wird. Dies kann je nach Anwendung ein Vorteil oder ein Nachteil sein kann automatisch Werte auf einer Seite innerhalb eines bestimmten Bereichs auf dem Client behalten.
Ein weiterer Punkt ist, dass die Kombination aus URL und Abfragezeichenfolge keine Leerzeichen oder andere illegale Zeichen enthalten darf, da Navigator und einige andere Browser sonst Probleme haben. Unzulässige Zeichen sind solche, die zur Trennung der URL und der Abfragezeichenfolge verwendet werden, wie zum Beispiel „/“, „:“, „?“ und „&“ (IE kann Leerzeichen automatisch in das richtige Format umwandeln – das Pluszeichen „+“) Andere unzulässige Zeichen können nicht verarbeitet werden)
Verwendung von Cookies in ASP
In diesem Abschnitt lernen wir die verschiedenen Techniken kennen, die Sammlungen, Methoden und Eigenschaften zur Verwendung durch ASP-Code bereitstellen.
1) Benutzerdaten werden in Cookies gespeichert.
Mithilfe von Cookies können zwei Arten von Werten gespeichert werden: Werte, die wir nicht speichern möchten, wenn der Browser geschlossen wird (z. B. Benutzerregistrierungsinformationen), und Werte, die wir speichern möchten bleiben erhalten, wenn der Benutzer die Website besucht. In jedem Fall steht ASP der Wert des Cookies für jede Seitenanforderung vom Browser des Benutzers zur Verfügung.
Sie müssen jedoch bedenken, dass das Cookie nur dann an den Server gesendet wird, wenn eine Anfrage für eine Seite innerhalb des virtuellen Pfads (Pfad) im Cookie gestellt wird. Wenn der Wert von path im Cookie nicht festgelegt ist, ist sein Wert standardmäßig der virtuelle Pfad der Seite, die das Cookie erstellt hat. Damit ein Cookie an alle Seiten einer Website gesendet werden kann, muss path="/" verwendet werden.
Hier ist ein Beispiel: Die Registrierungsinformationen des Benutzers werden in einem Cookie gespeichert. Da es keine Anwendungsgültigkeitsdauer gibt, bleibt der Cookie-Wert nur bis zum Schließen des Browsers erhalten:
...
Request.Cookies(„Benutzer“)(„UID“) = „<% = Request(„Benutzername“) %>“
Request.Cookies(„Benutzer“)(„PWD“) = „<% = Request(„Passwort“) %>“
Request.Cookies(“User”).Path = „/adminstuff“ 'Gilt nur für Admin-Seiten
...
dieses Cookie wird nun auf jeder Seite gefunden, die der Benutzer aus dem Adminstuff-Verzeichnis oder seinen Unterverzeichnissen anfordert. Wenn es nicht existiert, können Sie den Benutzer zur Registrierungsseite umleiten:
If (Request.Cookies("User")("UID") <> "alexhomer") _
Oder (Request.Cookies(“User”)(“PWD”) <> „secret“) Dann
Response.Redirect „login.asp?UserName=“ & Request.Cookies („Benutzer“) („UID“)
Ende wenn
...
Da der Benutzername im Cookie in der URL-Abfragezeichenfolge von Response.Redirect platziert wird, können Sie ihn bei der Anmeldung verwenden, wenn bei der Eingabe des Passworts ein Fehler auftritt und Sie möchten, dass der Benutzer den Benutzernamen nicht erneut eingeben muss. asp-Seite:
<FORM ACTION=“check_user.asp“ METHOD=“POST“>
<INPUT TYPE=“TEXT“ NAME=“Benutzername“
VALUE=“<% = Request.QueryString(“Benutzername“) %>“><P>
<INPUT TYPE=“SUBMIT“ VALUE=“LOGIN“>
</FORM>
2) Vorhandene Cookies ändern
Sie können ASP verwenden, um vorhandene Cookies zu ändern, Sie können jedoch nicht nur einen Wert im Cookie ändern. Beim Aktualisieren eines Cookies in der Response.Cookies-Sammlung geht der vorhandene Wert verloren. Mit dem folgenden Code können wir ein Cookie erstellen, das verwendet werden kann:
Response.Cookies("VisitCount")("StartDate") = dtmStart
Response.Cookies("VisitCount")("LastDate") = Jetzt
Response.Cookies("VisitCount")("Visits") = CStr(intVisits)
Response.Cookies("VisitCount").Path = "/" 'Auf die gesamte Website anwenden
Response.Cookies("VisitCount").Expires = DateAdd("m",3,Now)
Wenn Sie die Werte von Visits und LastDate aktualisieren möchten, dürfen Sie zunächst nicht alle Werte ändern und dann das gesamte Cookie neu schreiben :
datDtart = Antwort .Cookies("VisitCount")("StartDate")
intVisits = Response.Cookies("VisitCount")("Visits")
Response.Cookies("VisitCount")("StartDate") = dtmStart
Response.Cookies("VisitCount")("LastDate") = Jetzt
Response.Cookies("VisitCount")("Visits") = Cstr(intVisits)
Response.Cookies(“VisitCount”).Path = „/“
Response.Cookies("VisitCount").Expires = DateADD("m",3,Now + 1) und wie bei fast allen anderen Antwortmethoden und -eigenschaften sollte dies erfolgen, bevor etwas geschrieben wird (z. B. Öffnen eines <HTML>-Tags oder (beliebiger Text oder anderes HTML) zur Antwort hinzufügen.