Que es ASP (Active Server Pages)
ASP) es una tecnología del lado servidor de Microsoft para páginas web generadas dinámicamente, que ha sido comercializada como un anexo a Internet Information Server (IIS). La tecnología ASP está estrechamente relacionada con el modelo tecnológico de su fabricante. Intenta ser solución para un modelo de programación rápida ya que programar en ASP es como programar en VisualBasic, por supuesto con muchas limitaciones ya que es una plataforma que no se ha desarrollado como lo esperaba Microsoft.
Lo interesante de este modelo tecnológico es poder utilizar diversos componentes ya desarrollados como algunos controles ActiveX. Otros problemas que han hecho evolucionar esta tecnología es el no disponer de información "que oriente a quienes desean aprenderla y resulta muy costosa en tiempo descubrir aquí y allá toda la información para volverla altamente útil".
ASP ha pasado por cuatro iteraciones mayores, ASP 1.0 (distribuido con IIS 3.0), ASP 2.0 (distribuido con IIS 4.0), ASP 3.0 (distribuido con IIS 5.0) y ASP.NET (parte de la plataforma .NET de Microsoft). Las versiones pre-.NET se denominan actualmente (desde 2002) como ASP clásico.
En el último ASP clásico, ASP 3.0, hay siete objetos integrados disponibles para el programador, Application, ASPError, Request, Response, Server, Session y ObjectContext. Cada objeto tiene un grupo de funcionalidades frecuentemente usadas y útiles para crear páginas web dinámicas.
Las páginas pueden ser generadas mezclando código de scripts del lado del servidor (incluyendo acceso a base de datos) con HTML. Por ejemplo:
Código Web
Este código trae como resultado en html
Código Web
cuando se establece la variable del lado del servidor a X=1.
Se facilita la programación de sitios web mediante varios objetos integrados, como por ejemplo un objeto de sesión basada en cookies, que mantiene las variables mientras se pasa de página a página.
Desde 2002, el ASP clásico está siendo reemplazado por ASP.NET, que, entre otras cosas, reemplaza los lenguajes interpretados como VBScript o JScript por lenguajes compilados a código intermedio (llamado MSIL o Microsoft Intermediate Language) como Visual Basic, C#, o cualquier otro lenguaje que soporte la plataforma .NET. El código MSIL se compila con posterioridad a código nativo.
Emails con ASP Codigo fuente para mandar un mail mediante CDONTS
ASP Source Code:
Dim strTo, strSubject, strBody 'Strings for recipient, subject, boby Dim objCDOMail 'The CDO object
'First we'll read in the values entered strTo = Request.Form("to")
'These would read the message subject and body if we let you enter it 'strSubject = Request.Form("subject") 'strBody = Request.Form("body")
strSubject = "Sample E-mail sent from ASP 101!"
' This is multi-lined simply for readability strBody = "This message was sent from a sample at http://www.asp101.com. " strBody = strBody & "It is used to show people how to send e-mail from an " strBody = strBody & "Active Server Page. If you did not request this " strBody = strBody & "e-mail yourself, your address was entered by one of " strBody = strBody & "our visitors. We do not store these e-mail addresses." strBody = strBody & " Please address all concerns to webmaster@asp101.com."
' Some spacing: strBody = strBody & vbCrLf & vbCrLf
strBody = strBody & "This was sent to: "
' A lot of people have asked how to use form data in the emails so ' I added this line to the sample as an example of incorporating form ' data in the body of the email. strBody = strBody & Request.Form("to")
' A final carriage return for good measure! strBody = strBody & vbCrLf
'Ok we've got the values now on to the point of the script.
'We just check to see if someone has entered anything into the to field. 'If it's equal to nothing we show the form, otherwise we send the message. 'If you were doing this for real you might want to check other fields too 'and do a little entry validation like checking for valid syntax etc. If strTo = "" Then %>
Enter your e-mail address:
Si el valor de la cookie va a ser una cadena de caracteres, entonces deberá estar entre comillas. También es crear una colección de cookies de forma que se puede tener múltiples valores almacenados en ellas. Para ellos basta con añadir una key, de la siguiente forma:
En este caso podemos crear una colección de cookies que almacene información relacionada entre sí:
Para conocer si una cookie almacena varios valores, existe la propiedad HasKeys que determina si una cookie contiene una colección. Siguiendo con el ejemplo, para conocer si nuestra cookie tiene varios valores, se haría de la siguiente forma:
Devolviendo el valor true si tiene keys, y false en caso contrario. Una consideración que el lector debe tener es que si se utiliza el mismo nombre para cookie que la que define nuestra colección pero sin especificar un valor (key), se sobreescribirán todas las cookies que existan con ese nombre.
De esta forma se puede ver que utilizando la colección Cookies del objeto Response, es posible enviar cookies a través de las cabeceras HTTP, es decir crear esos ficheros pequeños de textos que se graban en el ordenador del usuario y que contienen información acerca de su conexión con la página web.
Colección Cookies
La sintaxis para crear una cookie es la siguiente: Response.Cookies("nombre_cookie")[("clave")] = value
Nombre Tipo de valor Descripción Nombre_cokie String Cadena que delimitada por comillas establece el nombre del cookie que se crea. Clave String (opcional) Cadena que delimitada por comillas establece el nombre de la clave que se crea. Si se utiliza una clave la cookie contendrá un objeto del tipo Dictionary.
La colección Cookies dispone de cinco propiedades. La sintaxis para su uso es: Response.Cookies("cookie").property = propValue
Propiedades Propiedad Descripción Domain Indica que la cookie sólo es utilizada en el dominio en el cual fue creada. El valor por defecto es el actual dominio donde se encuentre la página ASP. Es una propiedad de solo lectura Expires Establece el tiempo de vida de la cookie. Si no se fija este parámetro la cookie será borrada cuando se cierre el navegador. Es una propiedad de sólo lectura. HasKeys Especifica que la cookie es un objeto Dictionary. Es una propiedad de sólo lectura. Path Si se establece esta propiedad, la cookie solo es enviada en respuesta a las peticiones de las páginas situadas en ese directorio. El valor por defecto es el directorio raíz del directorio virtual de páginas ASP. Es una propiedad de sólo lectura. Secure Especifica que la cookie es "segura". Una cookie es segura solamente si se está utilizando el protocolo HTTPS (HTTP sobre Secure Socket Layer, SSL)
Manteniendo la cookie Una vez que se ha creado una cookie, se queda almacenada en el disco duro del ordenador del usuario que está visitando la página web que la ha creado. El tiempo de vida de esta cookie está definido por dos parámetros diferentes: el primero de ellos, por el tiempo que dura la sesión, que normalmente se establece en 20 min.; y el segundo es mientras está abierto el navegador. En el momento en que se cierra, la cookie se destruirá por lo que no se habrá conseguido el efecto deseado, es decir almacenar una serie de datos de forma indefinida y que estén disponibles para otras veces.
También es posible borrar una cookie en un momento determinado porque ya no vaya a ser necesaria. Para ello se utiliza el atributo Expires, de la siguiente forma:
De esta forma, en la fecha establecida, la cookie dejará de estar disponible para ser consultada o actualizada por la página web que la creó. Si lo que se desea es que la cookie caduque de forma inmediata, bastaría con escribir:
La mejor forma de trabajar con las fechas en las que debe de caducar una cookie, es utilizando la instrucción Date(), ya que se puede crear una cookie que caduque dentro de un año exactamente, escribiendo:
O que sólo esté activa durante un solo día, por ejemplo:
En este caso la fecha de caducidad afecta a todas las claves de la cookie (nombre, apellido1 y apellido2). De la misma manera es posible borrar todas las cookies que sean necesarias, ya que se puede establecer una fecha de caducidad que ya ha pasado.
De esta forma, no aseguramos que esta cookie ya ha caducado y por lo tanto ya no se encuentra disponible.
Leer una cookie Una vez que ya se ha creado una cookie o una colección de ellas, utilizando el mismo nombre, y también se ha definido la fecha de caducidad con el fin de saber hasta cuando va a estar disponible, llega el momento de poder leer el fichero cookie y la información que contiene.
Si para crear la cookie se utiliza el objeto Response, para leer su contenido se hace, lógicamente con el objeto Request. Siguiendo con el ejemplo anterior, para recuperar los datos de la cookie "datos_personales", hay que escribir las siguientes líneas:
Esta líneas, hacen que obtengamos el valor de cada una de las claves de la cookie que se ha denominado "datos_personales". Aunque es operación de puede realizar de forma más precisa utilizando la propiedad HasKeys, vista anteriormente, ya que las claves que pueda tener una cookie pueden ser muchas más. Por ello, y para optimizar mejor el código, se puede realizar de la siguiente forma:
Lo primero que se hace es comprobar si la cookie que utilizamos tiene claves, mediante la propiedad HasKeys, que devolverá true si es así. A continuación, y sabiendo que se trata de una colección, se utiliza el bucle For...In...Each para obtener todos los valores que contiene e irlos presentando en pantalla.
Además del valor Expires, existen otro que también se pueden utilizar con las cookies. Aunque no son del todo necesarios y pueden ser útiles en algún momento. El atributo Domain, establece el dominio desde el que se genera la cookie, un ejemplo podría ser:
El otro atributo que se puede utilizar es Path, y define el directorio virtual donde se genera la cookie. Como recordará el lector un directorio virtual se establece en la configuración del IIS o PWS. Un ejemplo de cómo se utiliza sería el siguiente:
De esta forma, y habiendo configurado "usuarios" como nombre del directorio virtual, se fija el lugar desde el que se crea la cookie. Utilizando estos dos atributos, Domain y Path, es posible tener información en todo momento de donde se originan las cookies de nuestra web.
Utilizando las cookies Para ver el funcionamiento, en su conjunto, del uso de las cookies, vamos a realizar un sencillo ejemplo, para ello es necesario crear dos páginas. La primera de ellas contiene un formulario en el que el usuario deberá de introducir su nombre y dirección email, para poder acceder a la segunda página. Junto al formulario existe la opción de permitir grabar esos datos en una cookie con el fin de no tener que volver a escribirlos cada vez que se llegue a esa página (un sistema parecido al que tiene Hotmail, por ejemplo, para recordar el identificador y la clave de la cuenta de correo). La finalidad de recuperar los datos de una cookie que son necesarios para acceder a la segunda página, y así lo señalado el usuario.
En el Listado 1, se puede observar todo el código de la primera página. Está dividida en dos partes, la primera, comprueba si hay o no hay cookie creada anteriormente. Si no es así se piden los datos al usuario a través de formulario (segunda parte), si por el contrario ya está creada utiliza el método Redirect del objeto Response para ir a la segunda página.
Para comprobar la existencia de la cookie se utiliza el atributo HasKeys de forma que devuelve True si existe o False si aún no está creada.
Además de redireccionar hacia otra página se añade, también, una nueva variable denominada cookie, que será la que informe si se ha accedido a la segunda página a través del formulario (datos que habrá introducido el usuario) o leyendo la cookie ya creada.
La segunda página ASP es la que lee los datos, ya sean de la cookie o del formulario. Para ello se lee la variable cookie, que se ha añadido a la URL, utilizando como ya conoce el lector el método QueryString del objeto Response.
Los datos que se obtienen del formulario van a ser los que se utilicen para crear la cookie. La forma de hacerlo es la siguiente:
Si el usuario ha decido guardar los datos (variable guardar_usuario es on), se crea una cookie que va a contener una colección de dos claves (nombre y email). De esta forma la cookie que almacene el nombre será la variable nombre que viene del formulario y la cookie de email será la que haya tecleado el usuario en el formulario. Como recuerda el lector, para obtener los datos de un formulario en el que se ha utilizado el método Post, se utiliza el método Form (recuerde el lector: QueryString cuando el método empleado es Get).
Al final del código de la segunda página se han añadido unas líneas que informan al usuario si se ha accedido a través del formulario o leyendo los datos almacenados en la cookie.
Información de acceso obtenida a través de una cookie
Información obtenida a través del formulario
Objeto FileSystemObject Los objetos vistos a lo largo de este curso nos permiten realizar acciones con información que se encuentra en una base de datos, que se va generando a lo largo de la página o bien que es introducida por el usuario a través de un formulario. Pero además de estas formas, existe otra fuente de origen de estos datos y es el propio servidor web en el que se encuentran alojadas las páginas. Este servidor almacena también otros ficheros distintos que están recogidos dentro de carpetas (directorios) y que todo ello está almacenado en una unidad de disco, que puede ser local o remota.
Poder acceder a estos elementos, tanto a su contenido como a información relacionado con ellos existe un objeto que provee al programador de una gran herramienta, ya que le permite acceder a ficheros, directorios y unidades desde una simple página ASP y todo ello utilizando la tecnología cliente/servidor. Con esto es posible, por ejemplo, saber qué espacio le queda al disco duro del servidor y si este dato es inferior de uno ya establecido nos lo notifique mediante un mensaje de email, o si existen demasiados ficheros en un directorio, poder mover el contenido de una carpeta a otra, o que podamos controlar de forma remota que usuarios dejan qué ficheros en el servidor, y todo ello sin necesidad de estar delante del servidor y utilizando tan sólo un navegador de Internet.
Objeto FileSystemObject Métodos Nombre Tipo de valor Descripción BuildPath String Cadena que delimitada por comillas establece el nombre del cookie que se crea. CopyFile
Copia un fichero CopyFolder
Copia una carpeta CreateFolder Folder Crea una carpeta CreateTextFile TextStream Crea un fichero con el objeto TextStream. DeleteFile
Borrar un fichero DeleteFolder
Borra una carpeta DriveExists Boolean Comprueba si existe una unidad FileExists Boolean Comprueba si existe un fichero FolderExists Boolean Comprueba si existe una carpeta GetAbsolutePathName String Devuelve la ruta absoluta GetBaseName String Devuelve el nombre de una ruta GetDrive Drive Devuelve la letra de una unidad GetDriveName String Devuelve el nombre de una unidad GetExtensionName String Devuelve la extensión de una ruta GetFile File Devuelve un fichero GetFileName String Devuelve el nombre de un fichero GetFolder Folder Devuelve una carpeta GetParentFolderName String Devuelve el camino a la carpeta superior GetSpecialFolder Folder Devuelve la ruta de varias carpetas del sistema GetTempName String enera un nombre que puede ser usado por un fichero temporal MoveFile
Mueve un fichero MoveFolder
Mueve una carpeta OpenTextFile TextStream Abre un fichero con el objeto TextStream
Colecciones Nombre Tipo de valor Descripción MoveFile Drives
Todo esto es posible utilizando el objeto, ya incorporado en la instalación de IIS o PWS denominado FilesystemObject. Este objeto tiene un modelo de objeto que consta de tres colecciones y tres objetos que hacen referencia a la jerarquía que a su vez contiene: unidades, carpetas y ficheros. Las colecciones son:
Drivers: que contiene un objeto Drive por cada una de las unidades que existen (incluye las unidades locales, fijas y removibles) Folders: contiene la colección de objetos Folder. Files:que contiene todos los objetos File por cada uno de los ficheros que hay en la carpeta seleccionada.
Los objetos son:
Drive: que contiene información acerca de la unidad consultada (espacio libre, nombre del volumen, tipo de sistema de ficheros –FAT,NTFS, etc.–). La mayoría de información es de "solo lectura". Folder: permite acceder a todas las propiedades de la carpeta que incluye el nombre de la misma, la colección de ficheros que contiene, tamaño, etc. File: que es el objeto de más bajo nivel dentro de la jerarquía El uso de este objeto permite saber toda la información del mismo, además de poder moverlo, copiarlo o incluso borrarlo del disco.
Por todo esto podemos decir que el comportamiento de FileSystemObject junto a todas sus colecciones, propiedades, y métodos permite realizar todo lo que se puede hacer con el Explorador de Windows o File Manager.
En el Listado 4 se puede ver un ejemplo de cómo actúa este objeto para, en este caso, mostrar por pantalla un listado de ficheros que contiene una carpeta específica, incluyendo otros datos como son su tamaño y fecha de la última modificación.
Lo primero que es necesario conocer es la ruta o situación de la carpeta (denominado ruta física) que queremos comprobar. Para ello primero obtenemos la ruta virtual del fichero, que en este ejemplo corresponde a /entrega6/mostrardirectorio.asp. La ruta virtual hace referencia a la situación del fichero con respecto al servidor web. Con esta información es sencillo conocer la ruta física utilizando el método MapPath del objeto Server, que como resultado devolverá E:\Inetpub\scripts\pcworld\entrega6\mostrardirectorio.asp.
Una vez conocida la situación del fichero que está dentro de la carpeta que se quiere visualizar su contenido, comenzamos a utilizar el objeto FileSystemObject, creando una instancia del mismo. Fíjese el lector que en este caso no es necesario hacer referencia al objeto Server (como hasta ahora se había realizado) a la hora de realizar la instancia.
Set objFSO = CreateObject("Scripting.FileSystemObject")
Ahora es necesario relacionar el fichero que se ha seleccionado con el directorio que se desea ver. Para ello se utiliza el método GetFile que utiliza como argumento una ruta física de un fichero y devuelve un objeto del tipo File. Es necesario tener un objeto File ya que nos permite conocer información acerca de ese fichero en particular.
Una vez que se tiene el objeto File que representa al fichero, se utiliza una propiedad de este objeto denominada ParentFolder. Esta propiedad nos devuelve una referencia a un objeto Folder que representa la carpeta en la que se encuentra el fichero, cuando se la da como argumento un objeto válido de tipo File. Para comprobar los ficheros que hay en ese directorio se utiliza la colección Files, que en este caso funciona como propiedad del objeto Folder. Esta colección es un conjunto de objetos del tipo Files: uno por cada uno de los ficheros que hay en el directorio.
Para visualizar todos los ficheros de esta carpeta, y como se trata de una colección se utiliza la sentencia For...Each...In. Este bucle recorrerá todos los ficheros, uno por uno, usando la variable objFileItem. Ahora tan sólo queda obtener la información desea por pantalla utilizando tres de las propiedades del objeto File: Name, que devuelve el nombre del fichero; size, devuelve el tamaño del fichero en bytes; y DateLastModified, que devuelve la fecha y hora de la última modificación.
De esta forma y formateando los resultados en una tabla con tres columnas, una para cada dato, se obtiene un listado de todos los ficheros que hay en la carpeta en la que se encuentra el fichero del ejemplo.
Para que el lector pueda practicar con este ejemplo y vea las posibilidades del mismo, puede utilizar un directorio fijado de antemano junto a un fichero. De esta forma, si establece el valor de strPhysicalPath="c:\windows\win.ini", por ejemplo, obtendrá un listado de todos los ficheros que están guardados dentro de la carpeta de Windows. Correcto paso de datos atraves de la URL Server.URLEncode Cuando utilices páginas con paso de variables entre ellas (como parámetros en la URL) es importante que tengas en cuenta que el navegador Netscape no será capaz de interpretar caracteres especiales como espacios, guiones, o la letra Ñ. Esta caracteristica puede evitarse utilizando el método URLencode del objeto server mediante la cual se puede formatear cualquier cadena con caracteres de escape que serán correctamente procesados por los dos navegadores más conocidos del mercado.
Por citar un ejemplo el valor "MªAngeles Muñoz" se convertiría -utilizando URLEncode- en "M%AAAngeles+Mu%F1oz"
Lo interesante de este modelo tecnológico es poder utilizar diversos componentes ya desarrollados como algunos controles ActiveX. Otros problemas que han hecho evolucionar esta tecnología es el no disponer de información "que oriente a quienes desean aprenderla y resulta muy costosa en tiempo descubrir aquí y allá toda la información para volverla altamente útil".
ASP ha pasado por cuatro iteraciones mayores, ASP 1.0 (distribuido con IIS 3.0), ASP 2.0 (distribuido con IIS 4.0), ASP 3.0 (distribuido con IIS 5.0) y ASP.NET (parte de la plataforma .NET de Microsoft). Las versiones pre-.NET se denominan actualmente (desde 2002) como ASP clásico.
En el último ASP clásico, ASP 3.0, hay siete objetos integrados disponibles para el programador, Application, ASPError, Request, Response, Server, Session y ObjectContext. Cada objeto tiene un grupo de funcionalidades frecuentemente usadas y útiles para crear páginas web dinámicas.
Las páginas pueden ser generadas mezclando código de scripts del lado del servidor (incluyendo acceso a base de datos) con HTML. Por ejemplo:
Código Web
<%if x=1 then%> <b>X igual a uno</b> <%else%> <b>X diferente a uno</b> <%end if%>
Código Web
<b>X igual a uno</b>
Se facilita la programación de sitios web mediante varios objetos integrados, como por ejemplo un objeto de sesión basada en cookies, que mantiene las variables mientras se pasa de página a página.
Desde 2002, el ASP clásico está siendo reemplazado por ASP.NET, que, entre otras cosas, reemplaza los lenguajes interpretados como VBScript o JScript por lenguajes compilados a código intermedio (llamado MSIL o Microsoft Intermediate Language) como Visual Basic, C#, o cualquier otro lenguaje que soporte la plataforma .NET. El código MSIL se compila con posterioridad a código nativo.
Emails con ASP Codigo fuente para mandar un mail mediante CDONTS
ASP Source Code:
Dim strTo, strSubject, strBody 'Strings for recipient, subject, boby Dim objCDOMail 'The CDO object
'First we'll read in the values entered strTo = Request.Form("to")
'These would read the message subject and body if we let you enter it 'strSubject = Request.Form("subject") 'strBody = Request.Form("body")
strSubject = "Sample E-mail sent from ASP 101!"
' This is multi-lined simply for readability strBody = "This message was sent from a sample at http://www.asp101.com. " strBody = strBody & "It is used to show people how to send e-mail from an " strBody = strBody & "Active Server Page. If you did not request this " strBody = strBody & "e-mail yourself, your address was entered by one of " strBody = strBody & "our visitors. We do not store these e-mail addresses." strBody = strBody & " Please address all concerns to webmaster@asp101.com."
' Some spacing: strBody = strBody & vbCrLf & vbCrLf
strBody = strBody & "This was sent to: "
' A lot of people have asked how to use form data in the emails so ' I added this line to the sample as an example of incorporating form ' data in the body of the email. strBody = strBody & Request.Form("to")
' A final carriage return for good measure! strBody = strBody & vbCrLf
'Ok we've got the values now on to the point of the script.
'We just check to see if someone has entered anything into the to field. 'If it's equal to nothing we show the form, otherwise we send the message. 'If you were doing this for real you might want to check other fields too 'and do a little entry validation like checking for valid syntax etc. If strTo = "" Then %>
Enter your e-mail address:
Si el valor de la cookie va a ser una cadena de caracteres, entonces deberá estar entre comillas. También es crear una colección de cookies de forma que se puede tener múltiples valores almacenados en ellas. Para ellos basta con añadir una key, de la siguiente forma:
En este caso podemos crear una colección de cookies que almacene información relacionada entre sí:
Para conocer si una cookie almacena varios valores, existe la propiedad HasKeys que determina si una cookie contiene una colección. Siguiendo con el ejemplo, para conocer si nuestra cookie tiene varios valores, se haría de la siguiente forma:
Devolviendo el valor true si tiene keys, y false en caso contrario. Una consideración que el lector debe tener es que si se utiliza el mismo nombre para cookie que la que define nuestra colección pero sin especificar un valor (key), se sobreescribirán todas las cookies que existan con ese nombre.
De esta forma se puede ver que utilizando la colección Cookies del objeto Response, es posible enviar cookies a través de las cabeceras HTTP, es decir crear esos ficheros pequeños de textos que se graban en el ordenador del usuario y que contienen información acerca de su conexión con la página web.
Colección Cookies
La sintaxis para crear una cookie es la siguiente: Response.Cookies("nombre_cookie")[("clave")] = value
Nombre Tipo de valor Descripción Nombre_cokie String Cadena que delimitada por comillas establece el nombre del cookie que se crea. Clave String (opcional) Cadena que delimitada por comillas establece el nombre de la clave que se crea. Si se utiliza una clave la cookie contendrá un objeto del tipo Dictionary.
La colección Cookies dispone de cinco propiedades. La sintaxis para su uso es: Response.Cookies("cookie").property = propValue
Propiedades Propiedad Descripción Domain Indica que la cookie sólo es utilizada en el dominio en el cual fue creada. El valor por defecto es el actual dominio donde se encuentre la página ASP. Es una propiedad de solo lectura Expires Establece el tiempo de vida de la cookie. Si no se fija este parámetro la cookie será borrada cuando se cierre el navegador. Es una propiedad de sólo lectura. HasKeys Especifica que la cookie es un objeto Dictionary. Es una propiedad de sólo lectura. Path Si se establece esta propiedad, la cookie solo es enviada en respuesta a las peticiones de las páginas situadas en ese directorio. El valor por defecto es el directorio raíz del directorio virtual de páginas ASP. Es una propiedad de sólo lectura. Secure Especifica que la cookie es "segura". Una cookie es segura solamente si se está utilizando el protocolo HTTPS (HTTP sobre Secure Socket Layer, SSL)
Manteniendo la cookie Una vez que se ha creado una cookie, se queda almacenada en el disco duro del ordenador del usuario que está visitando la página web que la ha creado. El tiempo de vida de esta cookie está definido por dos parámetros diferentes: el primero de ellos, por el tiempo que dura la sesión, que normalmente se establece en 20 min.; y el segundo es mientras está abierto el navegador. En el momento en que se cierra, la cookie se destruirá por lo que no se habrá conseguido el efecto deseado, es decir almacenar una serie de datos de forma indefinida y que estén disponibles para otras veces.
También es posible borrar una cookie en un momento determinado porque ya no vaya a ser necesaria. Para ello se utiliza el atributo Expires, de la siguiente forma:
De esta forma, en la fecha establecida, la cookie dejará de estar disponible para ser consultada o actualizada por la página web que la creó. Si lo que se desea es que la cookie caduque de forma inmediata, bastaría con escribir:
La mejor forma de trabajar con las fechas en las que debe de caducar una cookie, es utilizando la instrucción Date(), ya que se puede crear una cookie que caduque dentro de un año exactamente, escribiendo:
O que sólo esté activa durante un solo día, por ejemplo:
En este caso la fecha de caducidad afecta a todas las claves de la cookie (nombre, apellido1 y apellido2). De la misma manera es posible borrar todas las cookies que sean necesarias, ya que se puede establecer una fecha de caducidad que ya ha pasado.
De esta forma, no aseguramos que esta cookie ya ha caducado y por lo tanto ya no se encuentra disponible.
Leer una cookie Una vez que ya se ha creado una cookie o una colección de ellas, utilizando el mismo nombre, y también se ha definido la fecha de caducidad con el fin de saber hasta cuando va a estar disponible, llega el momento de poder leer el fichero cookie y la información que contiene.
Si para crear la cookie se utiliza el objeto Response, para leer su contenido se hace, lógicamente con el objeto Request. Siguiendo con el ejemplo anterior, para recuperar los datos de la cookie "datos_personales", hay que escribir las siguientes líneas:
Esta líneas, hacen que obtengamos el valor de cada una de las claves de la cookie que se ha denominado "datos_personales". Aunque es operación de puede realizar de forma más precisa utilizando la propiedad HasKeys, vista anteriormente, ya que las claves que pueda tener una cookie pueden ser muchas más. Por ello, y para optimizar mejor el código, se puede realizar de la siguiente forma:
Lo primero que se hace es comprobar si la cookie que utilizamos tiene claves, mediante la propiedad HasKeys, que devolverá true si es así. A continuación, y sabiendo que se trata de una colección, se utiliza el bucle For...In...Each para obtener todos los valores que contiene e irlos presentando en pantalla.
Además del valor Expires, existen otro que también se pueden utilizar con las cookies. Aunque no son del todo necesarios y pueden ser útiles en algún momento. El atributo Domain, establece el dominio desde el que se genera la cookie, un ejemplo podría ser:
El otro atributo que se puede utilizar es Path, y define el directorio virtual donde se genera la cookie. Como recordará el lector un directorio virtual se establece en la configuración del IIS o PWS. Un ejemplo de cómo se utiliza sería el siguiente:
De esta forma, y habiendo configurado "usuarios" como nombre del directorio virtual, se fija el lugar desde el que se crea la cookie. Utilizando estos dos atributos, Domain y Path, es posible tener información en todo momento de donde se originan las cookies de nuestra web.
Utilizando las cookies Para ver el funcionamiento, en su conjunto, del uso de las cookies, vamos a realizar un sencillo ejemplo, para ello es necesario crear dos páginas. La primera de ellas contiene un formulario en el que el usuario deberá de introducir su nombre y dirección email, para poder acceder a la segunda página. Junto al formulario existe la opción de permitir grabar esos datos en una cookie con el fin de no tener que volver a escribirlos cada vez que se llegue a esa página (un sistema parecido al que tiene Hotmail, por ejemplo, para recordar el identificador y la clave de la cuenta de correo). La finalidad de recuperar los datos de una cookie que son necesarios para acceder a la segunda página, y así lo señalado el usuario.
En el Listado 1, se puede observar todo el código de la primera página. Está dividida en dos partes, la primera, comprueba si hay o no hay cookie creada anteriormente. Si no es así se piden los datos al usuario a través de formulario (segunda parte), si por el contrario ya está creada utiliza el método Redirect del objeto Response para ir a la segunda página.
Para comprobar la existencia de la cookie se utiliza el atributo HasKeys de forma que devuelve True si existe o False si aún no está creada.
Además de redireccionar hacia otra página se añade, también, una nueva variable denominada cookie, que será la que informe si se ha accedido a la segunda página a través del formulario (datos que habrá introducido el usuario) o leyendo la cookie ya creada.
La segunda página ASP es la que lee los datos, ya sean de la cookie o del formulario. Para ello se lee la variable cookie, que se ha añadido a la URL, utilizando como ya conoce el lector el método QueryString del objeto Response.
Los datos que se obtienen del formulario van a ser los que se utilicen para crear la cookie. La forma de hacerlo es la siguiente:
Si el usuario ha decido guardar los datos (variable guardar_usuario es on), se crea una cookie que va a contener una colección de dos claves (nombre y email). De esta forma la cookie que almacene el nombre será la variable nombre que viene del formulario y la cookie de email será la que haya tecleado el usuario en el formulario. Como recuerda el lector, para obtener los datos de un formulario en el que se ha utilizado el método Post, se utiliza el método Form (recuerde el lector: QueryString cuando el método empleado es Get).
Al final del código de la segunda página se han añadido unas líneas que informan al usuario si se ha accedido a través del formulario o leyendo los datos almacenados en la cookie.
Información de acceso obtenida a través de una cookie
Información obtenida a través del formulario
Objeto FileSystemObject Los objetos vistos a lo largo de este curso nos permiten realizar acciones con información que se encuentra en una base de datos, que se va generando a lo largo de la página o bien que es introducida por el usuario a través de un formulario. Pero además de estas formas, existe otra fuente de origen de estos datos y es el propio servidor web en el que se encuentran alojadas las páginas. Este servidor almacena también otros ficheros distintos que están recogidos dentro de carpetas (directorios) y que todo ello está almacenado en una unidad de disco, que puede ser local o remota.
Poder acceder a estos elementos, tanto a su contenido como a información relacionado con ellos existe un objeto que provee al programador de una gran herramienta, ya que le permite acceder a ficheros, directorios y unidades desde una simple página ASP y todo ello utilizando la tecnología cliente/servidor. Con esto es posible, por ejemplo, saber qué espacio le queda al disco duro del servidor y si este dato es inferior de uno ya establecido nos lo notifique mediante un mensaje de email, o si existen demasiados ficheros en un directorio, poder mover el contenido de una carpeta a otra, o que podamos controlar de forma remota que usuarios dejan qué ficheros en el servidor, y todo ello sin necesidad de estar delante del servidor y utilizando tan sólo un navegador de Internet.
Objeto FileSystemObject Métodos Nombre Tipo de valor Descripción BuildPath String Cadena que delimitada por comillas establece el nombre del cookie que se crea. CopyFile
Copia un fichero CopyFolder
Copia una carpeta CreateFolder Folder Crea una carpeta CreateTextFile TextStream Crea un fichero con el objeto TextStream. DeleteFile
Borrar un fichero DeleteFolder
Borra una carpeta DriveExists Boolean Comprueba si existe una unidad FileExists Boolean Comprueba si existe un fichero FolderExists Boolean Comprueba si existe una carpeta GetAbsolutePathName String Devuelve la ruta absoluta GetBaseName String Devuelve el nombre de una ruta GetDrive Drive Devuelve la letra de una unidad GetDriveName String Devuelve el nombre de una unidad GetExtensionName String Devuelve la extensión de una ruta GetFile File Devuelve un fichero GetFileName String Devuelve el nombre de un fichero GetFolder Folder Devuelve una carpeta GetParentFolderName String Devuelve el camino a la carpeta superior GetSpecialFolder Folder Devuelve la ruta de varias carpetas del sistema GetTempName String enera un nombre que puede ser usado por un fichero temporal MoveFile
Mueve un fichero MoveFolder
Mueve una carpeta OpenTextFile TextStream Abre un fichero con el objeto TextStream
Colecciones Nombre Tipo de valor Descripción MoveFile Drives
Todo esto es posible utilizando el objeto, ya incorporado en la instalación de IIS o PWS denominado FilesystemObject. Este objeto tiene un modelo de objeto que consta de tres colecciones y tres objetos que hacen referencia a la jerarquía que a su vez contiene: unidades, carpetas y ficheros. Las colecciones son:
Drivers: que contiene un objeto Drive por cada una de las unidades que existen (incluye las unidades locales, fijas y removibles) Folders: contiene la colección de objetos Folder. Files:que contiene todos los objetos File por cada uno de los ficheros que hay en la carpeta seleccionada.
Los objetos son:
Drive: que contiene información acerca de la unidad consultada (espacio libre, nombre del volumen, tipo de sistema de ficheros –FAT,NTFS, etc.–). La mayoría de información es de "solo lectura". Folder: permite acceder a todas las propiedades de la carpeta que incluye el nombre de la misma, la colección de ficheros que contiene, tamaño, etc. File: que es el objeto de más bajo nivel dentro de la jerarquía El uso de este objeto permite saber toda la información del mismo, además de poder moverlo, copiarlo o incluso borrarlo del disco.
Por todo esto podemos decir que el comportamiento de FileSystemObject junto a todas sus colecciones, propiedades, y métodos permite realizar todo lo que se puede hacer con el Explorador de Windows o File Manager.
En el Listado 4 se puede ver un ejemplo de cómo actúa este objeto para, en este caso, mostrar por pantalla un listado de ficheros que contiene una carpeta específica, incluyendo otros datos como son su tamaño y fecha de la última modificación.
Lo primero que es necesario conocer es la ruta o situación de la carpeta (denominado ruta física) que queremos comprobar. Para ello primero obtenemos la ruta virtual del fichero, que en este ejemplo corresponde a /entrega6/mostrardirectorio.asp. La ruta virtual hace referencia a la situación del fichero con respecto al servidor web. Con esta información es sencillo conocer la ruta física utilizando el método MapPath del objeto Server, que como resultado devolverá E:\Inetpub\scripts\pcworld\entrega6\mostrardirectorio.asp.
Una vez conocida la situación del fichero que está dentro de la carpeta que se quiere visualizar su contenido, comenzamos a utilizar el objeto FileSystemObject, creando una instancia del mismo. Fíjese el lector que en este caso no es necesario hacer referencia al objeto Server (como hasta ahora se había realizado) a la hora de realizar la instancia.
Set objFSO = CreateObject("Scripting.FileSystemObject")
Ahora es necesario relacionar el fichero que se ha seleccionado con el directorio que se desea ver. Para ello se utiliza el método GetFile que utiliza como argumento una ruta física de un fichero y devuelve un objeto del tipo File. Es necesario tener un objeto File ya que nos permite conocer información acerca de ese fichero en particular.
Una vez que se tiene el objeto File que representa al fichero, se utiliza una propiedad de este objeto denominada ParentFolder. Esta propiedad nos devuelve una referencia a un objeto Folder que representa la carpeta en la que se encuentra el fichero, cuando se la da como argumento un objeto válido de tipo File. Para comprobar los ficheros que hay en ese directorio se utiliza la colección Files, que en este caso funciona como propiedad del objeto Folder. Esta colección es un conjunto de objetos del tipo Files: uno por cada uno de los ficheros que hay en el directorio.
Para visualizar todos los ficheros de esta carpeta, y como se trata de una colección se utiliza la sentencia For...Each...In. Este bucle recorrerá todos los ficheros, uno por uno, usando la variable objFileItem. Ahora tan sólo queda obtener la información desea por pantalla utilizando tres de las propiedades del objeto File: Name, que devuelve el nombre del fichero; size, devuelve el tamaño del fichero en bytes; y DateLastModified, que devuelve la fecha y hora de la última modificación.
De esta forma y formateando los resultados en una tabla con tres columnas, una para cada dato, se obtiene un listado de todos los ficheros que hay en la carpeta en la que se encuentra el fichero del ejemplo.
Para que el lector pueda practicar con este ejemplo y vea las posibilidades del mismo, puede utilizar un directorio fijado de antemano junto a un fichero. De esta forma, si establece el valor de strPhysicalPath="c:\windows\win.ini", por ejemplo, obtendrá un listado de todos los ficheros que están guardados dentro de la carpeta de Windows. Correcto paso de datos atraves de la URL Server.URLEncode Cuando utilices páginas con paso de variables entre ellas (como parámetros en la URL) es importante que tengas en cuenta que el navegador Netscape no será capaz de interpretar caracteres especiales como espacios, guiones, o la letra Ñ. Esta caracteristica puede evitarse utilizando el método URLencode del objeto server mediante la cual se puede formatear cualquier cadena con caracteres de escape que serán correctamente procesados por los dos navegadores más conocidos del mercado.
Por citar un ejemplo el valor "MªAngeles Muñoz" se convertiría -utilizando URLEncode- en "M%AAAngeles+Mu%F1oz"
No hay comentarios.