Los valores de Cookies son mucho más complejos que los de otras colecciones ASP como Form y ServerVariables. Una cookie es un pequeño fragmento de texto almacenado en el sistema del cliente por el navegador y enviado con cada solicitud al servidor en el dominio al que se aplica.
ASP facilita la aplicación de cookies. Puede obtener todos los valores de cookies enviados con la solicitud de la colección de Cookies del objeto Solicitud, y puede crear o modificar cookies y enviarlas al usuario a través de la colección de Cookies de Respuesta. objeto.
Las cookies contienen información que se puede construir de dos maneras. Las cookies de valor único proporcionan sus valores al código a través de una colección general similar a ASP. Sin embargo, cada miembro de una colección puede ser en sí mismo una colección, y las cookies que contienen esta información se denominan cookies de valores múltiples.
Crear una cookie de un solo valor es relativamente simple, de la siguiente manera:
Response.Cookies("item-name") = "item-value"
Para crear una cookie de múltiples valores, puede usar el siguiente comando:
Response.Cookies("item -name" )("sub-item-name") = "sub-item-value"
establece el dominio y la ruta de la aplicación de cookies y su período de validez. Usamos:
Response.Cookies("item-name").domain = "URL de dominio"
Response.Cookies(“nombre-elemento”).path = “ruta-virtual”
Response.Cookies("item-name").expires = #date#
Por lo general, el cliente solo envía la cookie al servidor con la solicitud cuando realiza una solicitud de una página en el directorio donde se creó la cookie. Al especificar el atributo de ruta, puede especificar en qué parte del sitio es válida esta cookie y la cookie se enviará con la solicitud. Si la cookie se envía con solicitudes de página para todo el sitio, establezca la ruta en "/".
Si el atributo Expires no está configurado, la cookie se eliminará automáticamente cuando se cierre la instancia actual del navegador.
Tenga en cuenta que la cookie ya se crea cuando enviamos cualquier resultado al navegador. Porque estas cookies son parte del encabezado HTTP de la página.
En ASP 3.0, el estado predeterminado del almacenamiento en búfer está activado y no se envía ningún resultado a menos que se utilice Response.Flush para especificar esto o que la página haya llegado al final. Esto significa que el código que crea la cookie puede estar en cualquier lugar de la página y puede ejecutarse hasta que cualquier resultado se "envíe" al cliente.
Para leer las cookies existentes, utilice la colección Request.Cookies. Se puede acceder a los elementos que contiene individualmente, de forma similar al método utilizado para crearlos.
StrSingleValue = Solicitud.Cookies("nombre-elemento")
StrSubItemValue = Request.Cookies("item-name")("sub-item-name")
Tenga en cuenta que la colección Request.Cookies (como todas las demás colecciones de Request) es de solo lectura. La colección Response.Cookies es de solo escritura. De hecho, puede acceder a los nombres de una serie de cookies en esta colección, pero no a sus valores.
Atravesando la colección de cookies
Para utilizar la colección de cookies de forma más cómoda, puede utilizar el atributo adicional denominado Haskeys. Si la cookie a la que se accede es en sí misma una colección, es decir, es una cookie de valores múltiples, devolverá True. Usando la propiedad Haskeys, puede recorrer la colección completa Request.Cookies para obtener una lista de todas las cookies y sus valores.
Para cada objItem en Request.Cookies
Si Request.Cookies(objItem).HasKey Entonces
'Utilice otro For Each para iterar todas las subclaves
Para cada objItemKey en Request.Cookies(objItem)
Respuesta.Escribir objItem & “(“ & objItemKey & “) = “_
& Solicitud.Cookies(objItem)(objItemKey) & “<BR>”
Próximo
Demás
'Imprime la cadena de cookies como de costumbre
Respuesta.Escribir objItem & “ = ” & Request.Cookies(objItem) & “<BR>”
Terminar si
SiguienteEsto
es muy similar al código complejo anterior que extrae múltiples valores de la colección Request.Form. Pero puedes usar el atributo Haskeys aquí para determinar si cada entrada es un conjunto. En el ejemplo del formulario, se debe consultar la propiedad Request.Form(item_name).Count porque los miembros de la colección Form (y todas las demás colecciones excepto las cookies) no pueden ser colecciones reales. ASP simplemente hace el trabajo "detrás de escena" y obtiene el valor de cada colección de entradas múltiples.
Diferencias entre Form y QueryString
Después de comprender las técnicas para acceder a varias colecciones ASP, es necesario resolver otra pregunta: ¿Cuál es la diferencia entre las colecciones Form y QueryString? Si va a utilizar ASP, sin duda debe tener en cuenta esta diferencia, pero debe consultar la forma en que funciona HTTP para volver a comprenderlos y comprenderlos.
Existen dos métodos generales para solicitar una página u otro recurso de un servidor web a través de HTTP. Puede usar el método GET para obtener el recurso directamente, o puede usar POST para pasar el valor al recurso correspondiente. El método GET es el predeterminado. Puede ver un ejemplo de una solicitud HTTP anteriormente en este capítulo:
8/7/99 10:27:16 Enviado GET /Store/Download.asp HTTP/1.1
Si coloca uno o más pares
.nombres Cuando el valor / se agrega a la URL de la página solicitada, se convierte en la cadena de consulta solicitada y se proporciona a la página ASP en la colección QueryString. Al hacer clic en un hipervínculo en una página web, mensaje de correo electrónico u otro documento, o ingresar la dirección en la barra de direcciones del navegador y presionar Enter, o hacer clic en el botón Enlaces o Favoritos en el navegador, todos usan el método GET.
Por tanto, la única forma de pasar valores a ASP en estas acciones es a través de la colección QueryString, añadiendo los valores a la URL.
Los valores que aparecen en la colección Request.QueryString y a los que se accede funcionan de la misma manera que la instancia de la colección Form que vimos anteriormente. Una combinación de URL y cadena de consulta:
http://mysite.com/process_page.asp?FirstName=Priscilla&LastName=Descartes
Se puede acceder al valor proporcionado en la colección QueryString de la siguiente manera:
strFirstName = Request.QueryString("FirstName") 'Return "Priscila"
strLastName = Request.QueryString("Apellido") 'Devuelve "Descartes"
strRaw = Solicitud.QueryString
'Devuelve
los métodos GET y POST "FirstName=Priscilla&LastName=Descartes" del formulario.
Al utilizar el segmento <FORM> en una página, puede establecer el valor del atributo METHOD de la etiqueta FORM abierta en "GET" o "POST". El valor predeterminado es "OBTENER". Si se utiliza "GET" o se omite su atributo, el navegador vincula este valor a todos los controles de la página, se convierte en una cadena de consulta y se adjunta a la URL de la página solicitada.
Cuando esta solicitud llega al servidor web, su valor lo proporciona la colección Request.QueryString de ASP. Sin embargo, si establece el atributo METHOD en "POST", el navegador encapsula el valor en el encabezado HTTP del servidor emisor y lo proporciona a ASP a través de la colección Request.Form.
Por cierto, el método POST se puede utilizar en todos los formularios HTML. Sin embargo, existen ciertas limitaciones en la longitud de la cadena URL del navegador o servidor. Por lo tanto, agregar cadenas largas puede provocar un desbordamiento y que algunos caracteres de cadena se trunquen. Al mismo tiempo, la cadena de consulta aparece en la barra de direcciones del navegador y en todos los enlaces y favoritos guardados. No solo eso, sino que también expone valores no deseados en la solicitud HTTP cuando pasa por el servidor web, y también puede aparecer en los archivos de registro de su servidor y otros servidores de enrutamiento. Los valores en los encabezados de las solicitudes HTTP rara vez son visibles y no aparecen en los archivos de registro.
Un pequeño problema a tener en cuenta al usar el método POST es que cuando el usuario vuelve a descargar el <FORM>, los valores del formulario ya no se conservan y sus valores están vacíos y deben volver a ingresarse. Sin embargo, cuando se adjunta a una URL, el valor se almacena como un enlace y se conservará y, por lo tanto, aparecerá en todas las solicitudes en las que la URL se combine con la cadena. Esto puede ser una ventaja o una desventaja según la aplicación. puede retener automáticamente valores en una página dentro de un cierto rango en el cliente).
Otro punto es que la combinación de URL y cadena de consulta no puede contener espacios u otros caracteres ilegales; de lo contrario, Navigator y algunos otros navegadores tendrán problemas. Los caracteres ilegales son aquellos que se utilizan para separar la URL y la cadena de consulta, como "/", ":", "?" y "&" (IE puede convertir automáticamente los espacios al formato correcto: el signo más "+", pero otros caracteres ilegales no pueden ser procesados)
Uso de cookies en ASP
En esta sección aprenderemos las diversas técnicas que proporcionan colecciones, métodos y propiedades para su uso por código ASP.
1) Los datos del usuario se almacenan en cookies.
Las cookies se pueden utilizar para almacenar dos tipos de valores: valores que no queremos guardar cuando se cierra el navegador (como la información de registro del usuario) y valores que queremos guardar. conservar cuando el usuario visita el sitio. En cada caso, el valor de la cookie está disponible para ASP para cada solicitud de página desde el navegador del usuario.
Sin embargo, debe recordar que la cookie solo se enviará al servidor cuando se realice una solicitud para una página dentro de la ruta virtual (ruta) en la cookie. De forma predeterminada, si el valor de ruta no está establecido en la cookie, su valor es la ruta virtual de la página que creó la cookie. Para que una cookie se envíe a todas las páginas de un sitio, se debe utilizar path="/".
A continuación se muestra un ejemplo. De una página de inicio de sesión personalizada, la información de registro del usuario se almacena en una cookie. Dado que no hay un período de validez de la aplicación, el valor de la cookie solo se conserva hasta que se cierra el navegador:
...
Solicitud.Cookies(“Usuario”)(“UID”) = “<% = Solicitud(“Nombre de usuario”) %>”
Solicitud.Cookies(“Usuario”)(“PWD”) = “<% = Solicitud(“Contraseña”) %>”
Request.Cookies(“Usuario”).Path = “/adminstuff” 'Solo se aplica a las páginas de administración
...
esta cookie ahora se encontrará en cada página que el usuario solicite desde el directorio adminstuff o sus subdirectorios. Si no existe, puede redirigir al usuario a la página de registro:
If (Request.Cookies("Usuario")("UID") <> "alexhomer") _
O (Request.Cookies(“Usuario”)(“PWD”) <> “secreto”) Luego
Response.Redirect “login.asp?UserName=” & Request.Cookies(“Usuario”)(“UID”)
Terminar si
...
Dado que el nombre de usuario en la cookie se coloca en la cadena de consulta URL de Response.Redirect, si ocurre un error al ingresar la contraseña y desea que el usuario no tenga que volver a escribir el nombre de usuario, puede usarlo en el inicio de sesión. página asp:
<FORM ACTION=”check_user.asp” METHOD=”POST”>
<TIPO DE ENTRADA=”TEXTO” NOMBRE=”Nombre de usuario”
VALOR=”<% = Solicitud.QueryString(“Nombre de usuario”) %>”><P>
<TIPO DE ENTRADA=”ENVIAR” VALOR=”INICIAR SESIÓN”>
</FORM>
2) Modificar las cookies existentes
Puede utilizar ASP para modificar las cookies existentes, pero no puede modificar solo un valor en la cookie. Al actualizar una cookie en la colección Response.Cookies, se perderá el valor existente. Podemos crear una cookie con el siguiente código, que se puede utilizar:
Response.Cookies("VisitCount")("StartDate") = dtmStart
Response.Cookies("VisitCount")("Última fecha") = Ahora
Respuesta.Cookies("VisitCount")("Visitas") = CStr(intVisitas)
Response.Cookies("VisitCount").Path = "/" 'Aplicar a todo el sitio
Response.Cookies("VisitCount").Expires = DateAdd("m",3,Now)
Si desea actualizar los valores de Visitas y Última Fecha, primero no debe cambiar todos los valores y luego reescribir la cookie completa :
datDtart = Respuesta .Cookies("VisitCount")("FechaInicio")
intVisitas = Respuesta.Cookies("VisitCount")("Visitas")
Response.Cookies("VisitCount")("Fecha de inicio") = dtmInicio
Response.Cookies("VisitCount")("Última fecha") = Ahora
Response.Cookies("VisitCount")("Visitas") = Cstr(intVisitas)
Respuesta.Cookies(“VisitCount”).Ruta = “/”
Response.Cookies("VisitCount").Expires = DateADD("m",3,Now + 1) y como ocurre con casi todos los demás métodos y propiedades de Response, se debe hacer antes de escribir algo (es decir, abrir una etiqueta <HTML> o cualquier texto u otro HTML) a la respuesta.