Fechas y monedas multi-pais con ASP Abril 22, 2010
Publicado por lineadecodigo en : ASP , Añadir un comenarioEl atributo LCID del objeto Session nos puede dar un juego muy grande en ASP a la hora de realizar aplicaciones que tengan que controlar el formato de las fechas y las monedas de diferentes países. Como ya vimos en el artículo Localización en ASP.
Y es que, modificando el contenido de dicha variable, conseguimos que sea el propio lenguaje, quien, mediante sus propias funciones de manejo de fechas y monedas, presente la información de la forma correcta.
Por defecto, el valor del atributo, es el valor en el que esté configurado el servidor. Este valor, suele ser, el valor del país origen del servidor. Para mostrar por pantalla el valor del atributo, vale con mostrarle por consola:
<%= Session.LCID %>
Antes de comenzar con el ejemplo, tenemos que aprender a utilizar dos funciones. La primera será Date. Esta función será la que nos devuelva la fecha de hoy. La segunda es FormatCurrency(cantidad). En este caso se formatea, atendiendo a el valor de LCID, la cantidad indicada como parámetro de la función.
Lo primero que vamos a hacer es volcar los valores por defecto de la fecha y moneda.
<h2>Valores por defecto (<%=Session.LCID%>)</h2> <% response.write("Fecha: " & date() & "") response.write("Moneda: " & FormatCurrency(50000)) %>
El resto de valores que nos queda por conocer, para nuestro ejemplo, son los siguientes:
- 1034 - Español
- 2057 - Reino Unido
- 1033 - Estados Unidos
- 1036 - Francia
Y ahora solo hay que ir asignando uno a uno dichos valores al atributo LCID, y en medio, volcando los datos:
|- Descargar el código
Session.LCID=1033
|- Reportar error en el código
|- Foro sobre ASP
Localización en ASP Abril 18, 2010
Publicado por lineadecodigo en : ASP , Hasta ahora 1 comentarioSiempre es interesante saber en que país estar instalado el servidor de cara a gestionar la localización de los usuarios. O, por lo menos, como han configurado la "Configuración Regional" de nuestro servidor. Ya que esto va a afectar a la forma en la que se representan las fechas y monedas dentro de nuestra página, si es que estamos utilizando las funciones que nos proporciona el lenguaje para el manejo de las mismas.
Lo más seguro que queramos modificar la configuración por defecto e incluso adaptarla dependiendo del tipo de usuario que se conecte a nuestra web.
Y es que cuando subimos nuestras páginas ASP a ciertos servidores vemos que, las fechas aparecen en perfecto formato ingles mm/dd/aa. Y claro, que si tu página es de público mayoritario hispano-hablante, no está muy bien, que se diga.
El coste de cambiar esto no os llevará más allá de 1 minuto, ya que lo único que tenemos que hacer es incluir la siguiente línea de código en el fichero global.asa
Session.LCID = 1034
La propiedad LCID del objeto Session nos permite configurar una localización o región específica para una determinada sesión.
El 1034 es el valor por defecto para España. Ahora que si manejasemos en algún sitio las monedas, tendríamos un pequeño problema. Ya que los países sudamericanos utilizan diferentes monedas: peso chileno, peso mexicano,...
En este sentido podemos utilizar una estructura de selección para determinar en que país nos encontramos
select case Session.LCID case 1034 Response.Write("España") case 11274 Response.Write("Argentina") case 16394 Response.Write("Bolivia") case 13322 Response.Write("Chile") case 9226 Response.Write("Colombia") case 5130 Response.Write("Costa Rica") case 7178 Response.Write("Republica Dominicana") case 12298 Response.Write("Ecuador") case 4106 Response.Write("Guatemala") case else Response.Write("Valor no contemplado") end select
Si tenemos usuarios en diferentes regiones que acceden a nuestra página, siempre podemos consultar la información y cargarla cuando inicien la sesión en el método Session_OnStart.
|- Descargar el código|- Reportar error en el código
|- Foro sobre ASP
Gestionando el TimeOut de sesión en ASP Marzo 26, 2010
Publicado por lineadecodigo en : ASP , Añadir un comenarioUna vez que un usuario se ha conectado a nuestra página web se establece una sesión. Durante todo el tiempo que el usuario se encuentre conectado podemos tener la necesidad de almacenar cierta información en su sesión. Toda esta gestión la podemos realizar mediante el objeto Session.
Cuando el usuario abandona la web, la sesión no es destruida, sino que es eliminada cuando ha transcurrido el tiempo demarcado como tiempo de sesión en el servidor web.
Si bien, podemos gestionar la sesión de dos formas. La primera es estableciendo en la página un tiempo de sesión diferente al del servidor. Para ello utilizamos el atributo TimeOut del objeto Session. El valor que se le asigna será en minutos como se muestra a continuación:
Session.TimeOut = 10 '10 minutos
Pero esta propiedad también es consultiva. Es decir, que podemos ver que valor tiene el servidor por defecto establecido como timeout de sesión.
Response.Write(Session.TimeOut)
La segunda forma es más directa y es que con ella podemos forzar el abandono de la sesión directamente. Esto lo conseguimos con el método Abandon del objeto Session.
Session.Abandon()
Este método lo que hace es borrar toda la información relativa a la sesión del usuario que lo ha ejecutado. Si el usuario, después de haber ejecutado un método Abandon, navegase a otra página volvería a crear una nueva sesión.
|- Descargar el código|- Reportar error en el código
|- Foro sobre ASP
Visitas de la página Marzo 22, 2010
Publicado por lineadecodigo en : ASP , Añadir un comenarioNo encontraremos nunca a una persona, que haya publicado una página web en Internet, que no este interesando en saber cuantas visitas recibe. Y es que la creación de cualquier sitio virtual encubre deseos personales, profesionales y en muchos casos monetarios. El número de visitas o "impactos" que recibe nuestra página será un buen medidor de la efciciencia o empatia que esta tiene en la red.
Existen diversas formas de controlar el número de visitas. En este caso vamos a explicar como hacerlo con el objeto Application que nos ofrece ASP. Esta no es la forma más eficiente de llevar este control, pero es una de las formas y qué menos que explicar su funcionamiento. Otras formas de control de visitas de la página y que, seguro, serán estudio de un artículo en Linea de Código son:
- Control mediante ficheros
- Control mediante bases de datos
- Lectura del log del servidor web
Pasamos a ver como controlar las visitas con el objeto Application... Si refrescamos la memoria, este objeto guarda información desde que se inicia el servidor web hasta que este es apagado.
La forma de acceso al objeto Application es muy sencilla. Si queremos incrementar su valor simplemente tendremos que codificar:
application("visitas") = application("visitas") + 1
Pero la pregunta es dónde tenemos que poner este código, ya que si lo ponemos en cada una de las páginas tendremos muchos datos que no nos sirven. Y es que este código tenemos que ponerlo en el fichero global.asa en el inicio de sesión del usuario (Session_OnStart). Es decir, cada vez que un usuario inicie sesión incrementaremos nuestro contador.
Sub Session_OnStart application.Lock application("visitas")=application("visitas")+1 application.UnLock End Sub
Tenemos que tener en cuenta que cuando hacedemos a un dato de aplicación hay que realizar un bloqueo de los datos ya múltiples usuarios pueden estar accediendo al mismo. Para ello utilizamos los métodos .Lock y .UnLock sobre el objeto Application.
Esta solución tiene una serie de carencias que son básicamente dos. La primera es que cuando se apaga el servidor, y esto puede suceder por múltiples motivos, mantenimiento,... perderemos toda la información de visitas, ya que no está persistida en un dispositivo no volatil, vamos, que está en memoria. La segunda carencia es que si un mismo usuario puede estar entrando en diferentes sesiones (le basta con abrir dos navegadores) y, por lo tanto, tendremos una información alterada.
En este punto, y por terminar, podríamos decir que existe una diferencia entre visitas de usuarios. Para ello deberiamos de eliminar las visitas repetidas por sesión. E impactos. Quiere decir, que este artículo lo tendríamos que haber titulado "Impactos de la página"
|- Descargar el código|- Reportar error en el código
|- Foro sobre ASP
Volcar el contenido de la sesión en ASP Enero 20, 2010
Publicado por lineadecodigo en : ASP , Hasta ahora 1 comentarioMediante este simple ejemplo buscamos ver cómo listar los datos que un usuario tiene almacenados en su sesión. En primer lugar hay que recordar que los datos de sesión están almacenados mientras el usuario realiza una navegación por nuestra web.
La forma que ASP nos ofrece para recuperar y poner información es el objeto Session. Si en este punto no sabemos como hacer esto es útil leerse el articulo Guardar información en la sesión del usuario.
En nuestro caso desconocemos el nombre de la variable que almacena el dato en sesión. Ya que sino podríamos utilizar la sentencia...
Session("nombreVariable")
...para recuperarla.
Lo que el objeto Session nos ofrece es la colección Contents, la cual, alberga a todas las variables instanciadas en sesión. Nos podemos valer de un bucle iterativo como for each para recuperarlas todas y mostrarlas en pantalla.
for each x in Session.Contents Response.Write(x + " =" + Session.Contents(x) + "<br>") next
En el caso de que la variable almacenada en sesión sea un array se nos producirá un error. Es por ello que hay que controlar que la variable sea o no un array mediante la función IsArray().
IsArray(Session(x))
En el caso de que el elemento sea un array, tendremos que recorrer todos sus elementos. Para este caso, un bucle for desde el primer elemento del array hasta el último sería suficiente.
|- Descargar el código
For w = LBound(Session(x)) to UBound(Session(x)) Response.Write(x + "[" + CStr(w) + "] = " + Session(x)(w) + "<br>") Next
|- Reportar error en el código
|- Foro sobre ASP
Insertar un registro en una BD con ADO Enero 8, 2010
Publicado por lineadecodigo en : ASP , Hasta ahora 1 comentarioLo primero que tenemos que hacer para poder insertar un registro en una BD con ADO es conectarnos a la base de datos a través de un objeto Connection. A este objeto hay que pasarle la cadena de conexión indicando donde se encuentra la base de datos. Nosotros vamos a hacer la conexión, en este caso, sin usar DSN. Es más recomendable conectarse a la base de datos vía un DSN, pero esto nos permite ver código nuevo.
Accederemos al fichero directamente:
Set db = Server.CreateObject("ADODB.Connection") Dim DB_CONNECTIONSTRING DB_CONNECTIONSTRING = "Driver={Microsoft Access Driver (*.mdb)};Dbq=" & Server.MapPath("/db/prueba.mdb") & ";" db.open DB_CONNECTIONSTRING
Tanto en el acceso con DSN o sin DSN el objeto utilizado es un ADODB.Connection
Una vez que hemos abierto la conexión con la base de datos tendremos que comprobar que el texto a insertar no existe en la base de datos. Para realizar esta comprobación utilizamos una sentencia SELECT y un objeto ADODB.Recordset.
set rs_existe = Server.CreateObject("ADODB.Recordset") QLStr = "SELECT valor FROM datos WHERE valor ='" + texto_insertar + "'" rs_existe.open SQLStr, DB_CONNECTIONSTRING, adOpenStatic, adLockReadOnly, adCmdText
En el caso de que esta búsqueda no nos devuelva ningún registro de la base de datos esto significa que la palabra a insertar no existe en nuestra base de datos. Es por ello que procederemos a realizar la inserción.
Lo que estamos haciendo es montar una sentencia SQL de tipo INSERT, la cual ejecutaremos sobre otro ADODB.Recordset
if not (rs_existe.EOF) then Response.Write ("El valor a insertar ya existe") else set rs_insert = Server.CreateObject("ADODB.Recordset") SQLStr = "INSERT INTO datos VALUES ('" + texto_recibido + "')" rs_insert.open SQLStr, DB_CONNECTIONSTRING, adOpenStatic, adLockReadOnly,adCmdText Response.Write ("Insertado el valor " + texto_recibido) end if
Para realizar una inserción en una base de datos utilizamos la sentencia INSERT; la cual tiene la siguiente forma:
INSERT INTO tabla[s] (campo[s]) VALUES (valor1, valor2,..., valorN)
Los valores deberán de coincidir con su posición en la tabla de la base de datos.
Con unas pocas líneas de código tenemos nuestro fichero ASP que utiliza los objetos de ADO para insertar un registro en una BD.
|- Descargar el código|- Reportar error en el código
|- Foro sobre ADO
Inicializar variables de sesión en ASP Diciembre 2, 2009
Publicado por lineadecodigo en : ASP , Añadir un comenarioCuando el usuario se conecta por primera vez a nuestra web, es muy probable, que podamos tener la necesidad de darle unos valores en la sesión o bien inicializarle unos parámetros. Por ejemplo, indicar que el usuario todavía no se ha logado, dependiendo de su IP darle unos valores de idioma u otros, crearle una cookie con la fecha de la visita (y otros datos),...
Esto descrito es bastante normal, pero, ¿Cómo sabemos porque página se va a logar el usuario? ¿Por la "home"?. O bien, hemos diseñado una web que obligue al usuario a entrar por la web o podrá entrar en cualquier página de nuestro "site".
En este último caso lo que no vamos a hacer es poner el código de incialización en todas las páginas de nuestra página. Vamos, que no es muy recomendable. Para esta situación tenemos el fichero global.asa. Dicho fichero contiene una sección que será la que servidor lance cuando entre un nuevo usuario en nuestra web, independientemente de por la página que lo haga.
La información de inicialización residirá en el método Session_OnStart y la información a ejecutar cuando el usuario abandona nuestra web, más bien, cuando se le acaba la sesión es Session_OnEnd.
Con esta información, si lo que queremos es, por ejemplo, darle un código de país (mediante el código LCID) y modificar su timeout de sesión tendríamos el siguiente código:
Sub Session_OnStart 'Tiempo de la sesión 20 minutos Session.Timeout = 20 'LCID para que fechas y monedas se vean en español Session.LCID = 1034 End Sub
Todo el accediendo al objeto Session, el cual nos permite manejar las variables de sesión.
De igual manera, cuando se acabe la sesión del usuario podríamos, por ejemplo, decrementar el número de usuarios activos del web:
|- Descargar el código
Sub Session_OnEnd application.Lock application("usuariosActivos")=application("usuariosActivos")-1 application.UnLock End Sub
|- Reportar error en el código
|- Foro sobre ASP
Directorios especiales en ASP Octubre 26, 2009
Publicado por lineadecodigo en : ASP , Añadir un comenarioUna de las cosas útiles en los lenguajes de programación es saber en que directorios concretos tenemos ciertas instalaciones. Por ejemplo, si estamos codificando una página ASP y queremos generar ficheros podríamos tener la necesidad de saber cual es el directorio dónde se dejan los ficheros temporales en la máquina que nos ejecutamos.
De esta manera, en ASP y mediante el objeto FileSystemObject podemos tener conocimiento donde estan instaladas algunas de las carpetas de Windows. Para ello simplemente tenemos que utilizar el método .GetSpecialFolder(). Este método puede recibir como parámetro tres números
- 0. Carpeta donde está instalado Windows.
- 1. Carpeta del sistema.
- 2. Carpeta del directorio de temporales.
Así el código en ASP que necesitamos sería algo parecido a:
|- Descargar el código
<% Response.Write "Carpeta de Windows " & fso.GetSpecialFolder (0) & "<br>" Response.Write "Carpeta del Sistema " & fso.GetSpecialFolder (1) & "<br>" Response.Write "Carpeta Temporal " & fso.GetSpecialFolder (2) & "<br>" %>
|- Reportar error en el código
|- Foro sobre ASP
Guardar información del usuario en la sesión con ASP Octubre 25, 2009
Publicado por lineadecodigo en : ASP , Hasta ahora 1 comentarioEl siguiente ejemplo nos muestra que tenemos que hacer para guardar información del usuario en una variable de sesión con ASP. Esto nos va a ser muy útil ya que podremos disponer de dicha información mientras el usuario esté conectado a nuestra web.
En este punto hay que aclaran un poco el concepto sesión. Y es, ¿qué consideramos como estar conectado a nuestra web?. Pues a un cliente que se identifique de forma unívoca mediante todas sus peticiones. Por ejemplo, en el caso de los navegadores, mantendremos activa la sesión siempre y cuando naveguemos con la misma pantalla del navegador o cuando abramos una nueva ventana a partir de la ventana anterior. Si ejecutamos de nuevo nuestro navegador, este al ser un proceso nuevo, tiene un identificador nuevo, y por lo tanto crea una nueva sesión en el servidor.
Una vez que tenemos estos conceptos básicos para poner un dato en sesión utilizamos el objeto Session de la siguiente forma:
Session("usuario") = "Víctor"
Este valor guardado durante la vida de la sesión se podrá recuperar de la siguiente forma:
Session("usuario")
y lo podremos volcar por pantalla si ponemos
Response.Write (Session("usuario"))
Una cosa que tenemos que tener en cuenta es el tiempo de vida de la sesión. Porque, claro, si el usuario se fuese a tomar un café, a dar un paseo y volviese al ordenador tras una hora, no sería de recibo seguir manteniéndole la sesión. Y es que, al fin y al cabo, estos datos ocupan lugar en la memoria del servidor. Además, si guardamos datos sensibles, estos, ante la ausencia del usuario, podrían ser utilizamos maliciosamente.
Aunque el tiempo de la sesión viene configurado en el servidor, podemos modificar el tiempo de vida de la sesión mediante la propiedad TimeOut de la siguiente forma:
Session.TimeOut = 10 '10 minutos
Y podríamos forzar el abandono de sesión del usuario mediante la función Abandon()
Session.Abandon()
Ahora codificaremos un pequeño ejemplo de tres página. En la primera de ellas crearemos los datos asociados al usuario, el nombre y el número de páginas vistas por ese usuario (otro ejemplo de utilización de los datos de sesión)
<% Session("usuario") = "Victor Cuervo" Session("paginas") = Session("paginas") + 1 Response.Write("Usuario:" + Session("usuario") + "<br>") Response.Write("Paginas vistas:" + CStr(Session("paginas"))) %>
En la segunda simularemos todas las páginas intermedias de nuestra web. Así que solo le incrementaremos la información de páginas vistas
<% Session("paginas") = Session("paginas") + 1 Response.Write("Usuario:" + Session("usuario") + "<br>") Response.Write("Paginas vistas:" + CStr(Session("paginas"))) %>
Y en la tercera y última permitiremos que el usuario abandone y cierre la sesión.
|- Descargar el código
<% Response.Write("Usuario:" + Session("usuario") + "<br>") Response.Write("Paginas vistas:" + CStr(Session("paginas"))) Session.Abandon() %>
|- Reportar error en el código
|- Foro sobre ASP
Usando ficheros temporales en ASP Octubre 21, 2009
Publicado por lineadecodigo en : ASP , Añadir un comenarioHace poco tiempo estaba inmerso en una pruebas de carga dentro de las cuales existia un punto donde se generaba un fichero de texto en ASP mediante el objeto FileSystemObject. El problema se nos planteaba cuando simulabamos grandes volumenes de peticiones con el mismo proceso ya que todas intentaban generar el mismo fichero. A si que el sistema de archivos de las máquinas se volvia loco.
Como la creación del fichero no era el fin último de las pruebas se opto por generar un fichero de nombre aleatorio. Llegados a este punto nos podemos llegar a pensar la necesidad de creación de algún procedimiento que nos genere nombres de fichero de forma aleatorio.
Pero la solución es mucho más sencilla ya que el objeto FileSystemObject nos ofrece el procedimiento GetTempName que nos devolverá el nombre de un fichero aleatorio para usar de manera temporal.
<% Set fso = Server.CreateObject("Scripting.FileSystemObject") Response.Write("El fichero temporal a usar es: " + fso.GetTempName()) %>
Algo muy sencillo y realmente útil. Se te ocurre alguna otra forma de usar ficheros temporales en ASP. Cuéntanosla...
|- Descargar el código|- Reportar error en el código



