Les valeurs des Cookies sont beaucoup plus complexes que celles des autres collections ASP telles que Form et ServerVariables. Un cookie est un petit morceau de texte stocké sur le système client par le navigateur et envoyé à chaque requête au serveur du domaine auquel il s'applique.
ASP facilite l'application des cookies. Vous pouvez obtenir toutes les valeurs de cookies envoyées avec la demande à partir de la collection Cookies de l'objet Request, et vous pouvez créer ou modifier des cookies et les renvoyer à l'utilisateur via la collection Cookies de la réponse. objet.
Les cookies contiennent des informations qui peuvent être construites de deux manières. Les cookies à valeur unique fournissent leurs valeurs au code via une collection générale de type ASP. Cependant, chaque membre d'une collection peut lui-même être une collection, et les cookies contenant ces informations sont appelés cookies à valeurs multiples.
La création d'un cookie à valeur unique est relativement simple, comme suit :
Response.Cookies("item-name") = "item-value"
Pour créer un cookie à valeurs multiples, vous pouvez utiliser la commande suivante :
Response.Cookies("item -name" )("sub-item-name") = "sub-item-value"
définit le domaine et le chemin d'application du cookie ainsi que sa période de validité. Nous utilisons :
Response.Cookies("item-name").domain = "URL-domaine"
Response.Cookies (« nom-élément »).path = « chemin-virtuel »
Response.Cookies("item-name").expires = #date#
Habituellement, le client envoie le cookie au serveur avec la requête uniquement lorsqu'il fait une demande pour une page dans le répertoire où le cookie a été créé. En spécifiant l'attribut path, vous pouvez spécifier où sur le site ce cookie est valide et le cookie sera envoyé avec la demande. Si le cookie est envoyé avec des demandes de page pour l'ensemble du site, définissez le chemin sur "/".
Si l'attribut Expires n'est pas défini, le cookie sera automatiquement éliminé à la fermeture de l'instance actuelle du navigateur.
Notez que le cookie est déjà créé lorsque nous envoyons une sortie au navigateur. Parce que ces cookies font partie de l’en-tête HTTP de la page.
Dans ASP 3.0, l'état par défaut de la mise en mémoire tampon est activé et aucune sortie n'est envoyée à moins que Response.Flush ne soit utilisé pour le spécifier ou que la page n'ait atteint la fin. Cela signifie que le code qui crée le cookie peut se trouver n'importe où sur la page et qu'il peut être exécuté jusqu'à ce que toute sortie soit « vidée » vers le client.
Pour lire les cookies existants, utilisez la collection Request.Cookies. Les éléments contenus sont accessibles individuellement, de la même manière que la méthode utilisée pour les créer.
StrSingleValue = Request.Cookies("nom-élément")
StrSubItemValue = Request.Cookies("item-name"))("sub-item-name")
Notez que la collection Request.Cookies (comme toutes les autres collections Request) est en lecture seule. La collection Response.Cookies est en écriture seule. En fait, vous pouvez accéder aux noms d'une série de cookies de cette collection, mais pas à leurs valeurs.
Parcours de la collection Cookies
Afin d'utiliser la collection Cookies plus facilement, vous pouvez utiliser l'attribut supplémentaire nommé Haskeys. Si le cookie consulté est lui-même une collection, c'est-à-dire s'il s'agit d'un cookie à valeurs multiples, cela renverra True. À l’aide de la propriété Haskeys, vous pouvez parcourir la collection complète Request.Cookies pour obtenir une liste de tous les cookies et de leurs valeurs.
Pour chaque objItem dans Request.Cookies
Si Request.Cookies(objItem).HasKey Alors
'Utilisez un autre For Each pour parcourir toutes les sous-clés
Pour chaque objItemKey dans Request.Cookies (objItem)
Response.Write objItem & "(" & objItemKey & ") = "_
& Request.Cookies(objItem)(objItemKey) & « <BR> »
Suivant
Autre
'Imprimez la chaîne de cookie comme d'habitude
Response.Write objItem & « = » & Request.Cookies(objItem) & « <BR> »
Fin si
NextCeci
est très similaire au code complexe précédent qui extrait plusieurs valeurs de la collection Request.Form. Mais vous pouvez utiliser ici l'attribut Haskeys pour déterminer si chaque entrée est un ensemble. Dans l'exemple Form, la propriété Request.Form(item_name).Count doit être interrogée car les membres de la collection Form (et toutes les autres collections à l'exception des cookies) ne peuvent pas être de véritables collections. ASP effectue simplement le travail « en coulisses » et obtient la valeur de chaque collection à entrées multiples.
Différences entre Form et QueryString
Après avoir compris les techniques d'accès aux différentes collections ASP, une autre question doit être résolue : quelle est la différence entre les collections Form et QueryString ? Si vous comptez utiliser ASP, vous devez sans doute être conscient de cette différence, mais vous devez vous référer au fonctionnement de HTTP pour les re-comprendre et les comprendre.
Il existe deux méthodes générales pour demander une page ou une autre ressource à un serveur Web via HTTP. Vous pouvez utiliser la méthode GET pour obtenir la ressource directement, ou vous pouvez utiliser POST pour transmettre la valeur à la ressource correspondante. La méthode GET est la méthode par défaut. Vous pouvez consulter un exemple de requête HTTP plus haut dans ce chapitre :
7/8/99 10:27:16 Envoyé GET /Store/Download.asp HTTP/1.1
Si vous mettez un ou plusieurs appariés. noms Lorsque la valeur / est ajoutée à l'URL de la page demandée, elle devient la chaîne de requête demandée et est fournie à la page ASP dans la collection QueryString. Cliquer sur un lien hypertexte sur une page Web, un message électronique ou un autre document, ou saisir l'adresse dans la barre d'adresse du navigateur et appuyer sur Entrée, ou cliquer sur le bouton Liens ou Favoris dans le navigateur, utilisent tous la méthode GET.
Par conséquent, la seule façon de transmettre des valeurs à ASP dans ces actions consiste à utiliser la collection QueryString, en ajoutant les valeurs à l'URL.
Les valeurs qui apparaissent dans la collection Request.QueryString et auxquelles on accède fonctionnent de la même manière que l'instance de collection Form que nous avons vue précédemment. Une combinaison d'URL et de chaîne de requête :
http://mysite.com/process_page.asp?FirstName=Priscilla&LastName=Descartes
La valeur fournie dans la collection QueryString est accessible comme suit :
strFirstName = Request.QueryString("FirstName") 'Return "Priscille"
strLastName = Request.QueryString("LastName") 'Retour "Descartes"
strRaw = Requête.QueryString
'Renvoyer "FirstName=Priscilla&LastName=Descartes"
Méthodes GET et POST du formulaire
Lorsque vous utilisez le segment <FORM> dans une page, vous pouvez définir la valeur de l'attribut METHOD de la balise FORM ouverte sur "GET" ou "POST". la valeur par défaut est "GET". Si « GET » est utilisé ou si son attribut est omis, le navigateur lie cette valeur à tous les contrôles de la page, devient une chaîne de requête et est attachée à l'URL de la page demandée.
Lorsque cette requête arrive sur le serveur Web, sa valeur est fournie par la collection Request.QueryString d'ASP. Toutefois, si vous définissez l'attribut METHOD sur « POST », le navigateur encapsule la valeur dans l'en-tête HTTP du serveur d'envoi et la fournit à ASP via la collection Request.Form.
À propos, la méthode POST peut être utilisée dans tous les formulaires HTML. Cependant, il existe certaines limitations quant à la longueur de la chaîne URL du navigateur ou du serveur. Par conséquent, l’ajout de longues chaînes peut entraîner un débordement et la troncature de certains caractères de chaîne. Dans le même temps, la chaîne de requête apparaît dans la barre d'adresse du navigateur et dans tous les liens et favoris enregistrés. Non seulement cela, mais il expose également des valeurs indésirables dans la requête HTTP lors de son passage via le serveur Web, et cela peut également apparaître dans les fichiers journaux de votre serveur et d'autres serveurs de routage. Les valeurs dans les en-têtes de requête HTTP sont rarement visibles et n'apparaissent pas dans les fichiers journaux.
Un petit problème à noter avec l'utilisation de la méthode POST est que lorsque l'utilisateur retélécharge le <FORM>, les valeurs du formulaire ne sont plus conservées et leurs valeurs sont vides et doivent être ressaisies. Cependant, lorsqu'elle est attachée à une URL, la valeur est stockée sous forme de lien et sera conservée et apparaîtra donc dans toutes les requêtes où l'URL est combinée avec la chaîne. Cela peut être un avantage ou un inconvénient selon l'application (Certains navigateurs. peut automatiquement conserver les valeurs sur une page dans une certaine plage sur le client).
Un autre point est que la combinaison de l'URL et de la chaîne de requête ne peut contenir aucun espace ou autre caractère illégal, sinon Navigator et certains autres navigateurs auront des problèmes. Les caractères illégaux sont ceux utilisés pour séparer l'URL et la chaîne de requête, tels que "/", ":", "?" et "&" (IE peut automatiquement convertir les espaces au format correct - le signe plus "+", mais les autres caractères illégaux ne peuvent pas être traités)
Utilisation de cookies dans ASP
Dans cette section, nous apprendrons les différentes techniques qui fournissent des collections, des méthodes et des propriétés à utiliser par le code ASP.
1) Les données de l'utilisateur sont stockées dans les cookies.
Les cookies peuvent être utilisés pour stocker deux types de valeurs : les valeurs que nous ne souhaitons pas enregistrer à la fermeture du navigateur (telles que les informations d'enregistrement de l'utilisateur) et les valeurs que nous souhaitons conserver. conserver lorsque l'utilisateur visite le site. Dans chaque cas, la valeur du cookie est disponible pour ASP pour chaque demande de page du navigateur de l'utilisateur.
Cependant, vous devez vous rappeler que le cookie ne sera envoyé au serveur que lorsqu'une demande sera faite pour une page située dans le chemin virtuel (chemin) du cookie. Par défaut, si la valeur de path n'est pas définie dans le cookie, sa valeur est le chemin virtuel de la page qui a créé le cookie. Pour qu'un cookie soit envoyé à toutes les pages d'un site, path="/" doit être utilisé.
Voici un exemple. À partir d'une page de connexion personnalisée, les informations d'inscription de l'utilisateur sont stockées dans un cookie. Puisqu'il n'y a pas de durée de validité de l'application, la valeur du cookie n'est conservée que jusqu'à la fermeture du navigateur :
...
Request.Cookies("Utilisateur")("UID") = "<% = Demande("NomUtilisateur") %>"
Request.Cookies("Utilisateur")("PWD") = "<% = Demande("Mot de passe") %>"
Request.Cookies(« User »).Path = « /adminstuff » 'S'applique uniquement aux pages d'administration
...
ce cookie se retrouvera désormais sur chaque page que l'utilisateur demande depuis le répertoire adminstuff ou ses sous-répertoires. S'il n'existe pas, vous pouvez rediriger l'utilisateur vers la page d'inscription :
If (Request.Cookies("User"))("UID") <> "alexhomer") _
Ou (Request.Cookies("Utilisateur")("PWD") <> "secret") Puis
Response.Redirect "login.asp?UserName=" et Request.Cookies ("Utilisateur") ("UID")
Fin si
...
Étant donné que le nom d'utilisateur dans le cookie est placé dans la chaîne de requête URL de Response.Redirect, si une erreur se produit lors de la saisie du mot de passe et que vous souhaitez que l'utilisateur n'ait pas à retaper le nom d'utilisateur, vous pouvez l'utiliser lors de la connexion. asp :
<FORM ACTION=”check_user.asp” METHOD=”POST”>
<INPUT TYPE=”TEXT” NAME=”Nom d’utilisateur”
VALUE="<% = Request.QueryString("UserName") %>"><P>
<INPUT TYPE=”SUBMIT” VALUE=”CONNEXION”>
</FORM>
2) Modifier les cookies existants
Vous pouvez utiliser ASP pour modifier les cookies existants, mais vous ne pouvez pas modifier une seule valeur dans le cookie. Lors de la mise à jour d'un cookie dans la collection Response.Cookies, la valeur existante sera perdue. Nous pouvons créer un cookie avec le code suivant, qui peut être utilisé :
Response.Cookies("VisitCount"))("StartDate") = dtmStart
Response.Cookies("VisitCount"))("LastDate") = Maintenant
Response.Cookies("VisitCount"))("Visites") = CStr(intVisits)
Response.Cookies("VisitCount").Path = "/" 'Appliquer à l'ensemble du site
Response.Cookies("VisitCount").Expires = DateAdd("m",3,Now)
Si vous souhaitez mettre à jour les valeurs de Visits et LastDate, vous devez d'abord ne pas modifier toutes les valeurs, puis réécrire l'intégralité du cookie :
datDtart = Réponse .Cookies("VisitCount"))("StartDate")
intVisits = Response.Cookies("VisitCount")("Visites")
Response.Cookies("VisitCount"))("StartDate") = dtmStart
Response.Cookies("VisitCount"))("LastDate") = Maintenant
Response.Cookies("VisitCount"))("Visites") = Cstr(intVisits)
Réponse.Cookies("VisitCount").Path = "/"
Response.Cookies("VisitCount").Expires = DateADD("m",3,Now + 1) et comme pour presque toutes les autres méthodes et propriétés de réponse, cela doit être fait avant d'écrire quoi que ce soit (c'est-à-dire ouvrir une balise <HTML> ou n'importe quel texte ou autre HTML) à la réponse.