Cuando se utiliza ASP para escribir comunidades virtuales, compras en línea y otros programas, los objetos Aplicación y Sesión desempeñan un papel decisivo y se pueden utilizar de forma flexible y racional.
Este objeto es la clave para mejorar la calidad del programa. Permítanme brindarles una introducción detallada a estos dos objetos integrados de ASP según mi experiencia en esta área.
1. Descripción general de los miembros del objeto Aplicación
Los miembros de objetos de aplicación incluyen colecciones, métodos y eventos de objetos de aplicación.
⒈Una colección de objetos de aplicación.
Colección de contenidos: una colección de todas las variables almacenadas en el objeto de aplicación que no están definidas mediante el elemento <OBJECT>.
StaticObjects: una colección de todas las variables almacenadas en el objeto Aplicación definido utilizando el elemento <OBJECT>
Ejemplo: existe la siguiente asignación en default.asp
aplicación(a)=a
aplicación(b)=128
aplicación(c)=falso
Luego está la colección de contenidos.
application.contents(1)=a 'también se puede escribir como application.contents(a)=a
application.contents(2)=128 'también se puede escribir como application.contents(b)=128
application.contents(3)=false 'también se puede escribir como application.contents(c)=false
El autor aquí recomienda utilizar un método como application.contents (a) al llamar, porque es más intuitivo si está representado por un número de serie.
Considere el orden de asignación.
⒉Métodos de objeto de aplicación
Contents.Remove (nombre de variable): elimina la variable especificada de la colección Application.Contents
Contents.RemoveAll(): elimina todas las variables de la colección Application.Contents
Lock(): bloquea el objeto Aplicación para que solo la página ASP actual pueda acceder al contenido.
Desbloquear(): Desbloquea el objeto Aplicación
Ejemplo: en default.asp:
aplicación(a)=a
aplicación(b)=128
aplicación(c)=falso
respuesta.escribir aplicación.contents(1)&<br>
respuesta.escribir aplicación.contenido(2)&<br>
respuesta.escribir aplicación.contents(3)&<br>
respuesta.escribir después de eliminar b:
aplicación.contents.remove(b)
respuesta.escribir aplicación.contenido(1)&<br>
respuesta.escribir aplicación.contents(2)&<br>
Resultado de la ejecución:
a
128
FALSO
Después de quitar b:
a
FALSO
Si desea eliminar todas las variables de la colección, simplemente use application.contents.removeall. En cuanto a los métodos de bloqueo y desbloqueo, se utilizan a menudo en la práctica.
El lector también está familiarizado con él, por lo que no será una carga aquí.
⒊Evento de objeto de aplicación
OnStart: Ocurre cuando el primer usuario que accede al servidor accede a una página por primera vez
OnEnd: Ocurre cuando la sesión del último usuario ha finalizado y se han ejecutado todos los códigos para el evento OnEnd de la sesión, o cuando el último usuario accede
El servidor se produce después de un período de tiempo (normalmente 20 minutos) en el que nadie accede al servidor.
Si desea definir qué hacer en los eventos OnStart y OnEnd del objeto de la aplicación, debe escribir el código en el archivo Global.asa (ejemplos a continuación) y
Y coloque el archivo en el directorio raíz del sitio (generalmente Inetpubwwwroot)
2. Descripción general de los miembros del objeto Sesión
Los miembros del objeto Sesión tienen un atributo más que el objeto Aplicación, a saber: colecciones, propiedades, métodos y eventos.
⒈Colección de objetos de sesión
Contenido: una colección de todas las variables almacenadas en un objeto de sesión específico que no están definidos mediante el elemento <OBJECT>.
StaticObject: una colección de todas las variables definidas utilizando el elemento <OBJECT> y almacenadas en el objeto Session.
Ejemplo: existe la siguiente asignación en default.asp
sesión(a)=a
sesión(b)=128
sesión(c)=falso
Luego está la colección de contenidos.
session.contents(1)=a 'también se puede escribir como session.contents(a)=a
session.contents(2)=128 'también se puede escribir como session.contents(b)=128
session.contents(3)=false 'también se puede escribir como session.contents(c)=false
⒉Propiedades del objeto de sesión
Página de códigos: legible/escribible. Tipo entero. Define la página de códigos utilizada para mostrar el contenido de la página en el navegador. Una página de códigos es el conjunto de caracteres de valores numéricos que utilizan diferentes idiomas
Diferentes páginas de códigos. Por ejemplo, la página de códigos ANSI es 1252, la página de códigos japoneses es 932 y la página de códigos de chino simplificado es 936.
LCID: legible/escribible. Tipo entero. Define el identificador de configuración regional de la página enviado al navegador. LCID es una abreviatura estándar internacional que identifica de forma única una región, p.
2057 define el símbolo monetario de la región actual como £.
ID de sesión: solo lectura. Tipo largo. Devuelve el identificador de sesión para esta sesión. Cada vez que se crea una sesión, el servidor asigna automáticamente un identificador. se puede basar en ello
El valor determina cuál de los dos usuarios accede primero al servidor.
Tiempo de espera: legible/escribible. Tipo entero. Define un límite de tiempo de espera en minutos para la sesión. Si el usuario no actualiza ni solicita ninguno dentro de este tiempo
página web, la sesión generada por el usuario finalizará automáticamente. El valor predeterminado es 20.
Los atributos anteriores son de poca utilidad en aplicaciones reales y básicamente no es necesario modificarlos. Estos atributos no tienen nada de especial.
⒊Métodos de objeto de sesión
Contents.Remove (nombre de la variable): elimina la variable especificada de la colección Session.contents
Contents.Removeall(): elimina todas las variables de la colección Session.contents
Abandonar (): finaliza la sesión del usuario actual y destruye el objeto de sesión actual.
Los métodos Contents.Remove (nombre de la variable) y Contents.Removeall() del objeto Session son básicamente los mismos que los del objeto Aplicación.
Para ayudar a comprender, puede consultar el ejemplo anterior para cambiar Aplicación a Sesión. Lo que quiero explicar aquí es Contents.Removeall() y Abandon()
La diferencia es que la ejecución de estos dos métodos liberará el archivo actual.
Todas las variables de sesión de la sesión del usuario. La diferencia es que Contents.Removeall() simplemente libera el valor de la variable de sesión sin finalizar la sesión actual.
Además de liberar la variable Session, Abandon() también finalizará la sesión y activará el evento Session_OnEnd. Espero que todos presten atención a la diferencia entre los dos.
⒋Eventos del objeto de sesión
OnStart: Se activa cuando se genera una sesión de usuario ASP. Este evento se genera una vez que un usuario solicita cualquier página de este servidor.
OnEnd: Se activa cuando finaliza la sesión del usuario ASP. Este evento también se activará cuando se utilice el método Abandon() o el tiempo de espera.
Estos dos eventos son los mismos que los eventos OnStart y OnEnd de la Aplicación y deben colocarse en el archivo Global.asa.
Centrémonos en estudiar contigo el uso de estos cuatro eventos.
3. Global.asa
Los objetos Aplicación y Sesión de ASP incorporan una característica que otros objetos integrados de ASP no tienen: los eventos. Cada vez que un visitante accede al servidor, un
Eventos OnStart (el primer visitante activará los eventos OnStart de Aplicación y Sesión al mismo tiempo, pero la Aplicación precede a la Sesión), cada visitante
Se activará un evento OnEnd cuando finalice cada sesión (los eventos OnEnd tanto de la Aplicación como de la Sesión se activarán cuando finalice la última sesión del invitado, pero
La sesión precede a la Solicitud).
Los dos eventos OnStart y OnEnd se utilizan generalmente en comunidades virtuales para contar el número de personas en línea, modificar el estado en línea y fuera de línea de los usuarios, etc. Para definir estas dos cosas específicamente
archivo, debe escribir el código en el archivo Global.asa y colocar el archivo en el directorio raíz del sitio (el valor predeterminado es Inetpubwwwroot). además,
Los objetos Aplicación y Sesión especifican otros objetos integrados de ASP (Respuesta, Solicitud,
Servidor, Sesión...) no se pueden utilizar. El siguiente es un ejemplo de cómo contar el número de personas en línea en una comunidad virtual para ilustrar cómo utilizar estos dos eventos.
Descripción del archivo:
global.asa se encuentra en el directorio d:Inetpubwwwroot
default.asp se encuentra en el directorio d:Inetpubwwwroot, la página de inicio de sesión de la comunidad virtual.
login.asp se encuentra en el directorio d:Inetpubwwwroot y se utiliza para detectar el nombre de usuario y la contraseña ingresados por el usuario.
index.asp se encuentra en el directorio d:Inetpubwwwroot, la página de inicio de la comunidad virtual.
bbs.mdb se encuentra en el directorio d:Inetpubwwwroot y es una base de datos que almacena información del usuario.
Estructura de la base de datos (ACCESS):
===tabla de bbs===
id ID de usuario, entero largo
nombre nombre de usuario, tipo de texto
código contraseña, tipo de texto
estado en línea en línea, sí/no
===global.asa===
<script IDIOMA=VBScript RUNAT=Servidor>
Subaplicación_OnStart
solicitud (en línea) = 0
Subtítulo final
subApplication_OnEnd
segundo sub
SubSession_OnStart
Subtítulo final
SubSession_OnEnd
si session.contents(pass) entonces 'Determina si es el Session_OnEnd del usuario que inició sesión
bloqueo.de.aplicación
solicitud (en línea) = solicitud (en línea) -1
aplicación.desbloquear
terminar si
Subtítulo final
</guión>
===============
=== iniciar sesión.asp ===
... 'Verificación de contraseña, conectarse a la base de datos y verificar si el nombre de usuario y la contraseña ingresados por el usuario son correctos.
si pasa la verificación de contraseña, entonces
sesión(nombre)=rs(nombre)
sesión(id)=rs(id)
sesión(contraseña)=verdadero
demás
rs.cerrar
con.cerrar
respuesta. ¡escribir la contraseña es incorrecta!
respuesta.fin
terminar si
bloqueo.de.aplicación
solicitud (en línea) = solicitud (en línea) +1
conn.Execute (actualizar bbs establecido en línea=1 donde id=&session(id))'Establecer el estado del usuario en línea
aplicación.desbloquear
rs.cerrar
con.cerrar
respuesta.redirect index.asp 'Después de inicializar los datos, salte a la página de inicio de la comunidad
============
En este ejemplo, use la variable de aplicación (en línea) para registrar la cantidad de personas en línea que han iniciado sesión en la comunidad, porque una vez que un usuario accede al servidor, no importa si el usuario está
Cuando inicie sesión, se generará el evento OnStart, por lo que no podrá aumentar la Aplicación (en línea) en uno en el evento OnStart. Porque independientemente de si se trata de la sesión de un usuario que ha iniciado sesión
El evento OnEnd se generará cuando finalice (si un visitante visita el servidor pero no inicia sesión en la comunidad, el evento OnEnd también se generará después de que finalice su sesión), por lo que en
Se utiliza una declaración if en el evento Session_OnEnd para determinar si es un evento OnEnd para un usuario que ha iniciado sesión. De ser así, el número de personas en línea se reducirá en uno.
Este es solo un ejemplo simple de contar la cantidad de personas en línea. Para una comunidad virtual completa, no basta con contar cuántas personas están en línea.
Hay un campo en línea en la base de datos que se utiliza para registrar el estado en línea del usuario. Cuando el usuario inicia sesión, en línea se establece en 1 en login.asp, pero no aparece cuando el usuario está fuera de línea.
Online está configurado en 0. Para mejorarlo, debe modificar el evento Session_OnEnd y configurarlo en línea en 0 en este evento.
===loal. sas===
<script IDIOMA=VBScript RUNAT=Servidor>
Subaplicación_OnStart
solicitud (en línea) = 0
establecer aplicación(conexión)=Servidor.CreateObject(ADODB.Conexión)
application(db)=Server.MapPath( bs.mdb) 'Es mejor utilizar la ruta absoluta bs.mdb aquí, como se detalla a continuación
Subtítulo final
subApplication_OnEnd
establecer aplicación (conexión) = nada
Subtítulo final
SubSession_OnStart
Subtítulo final
SubSession_OnEnd
si session.contents(pass) entonces 'Determina si es el Session_OnEnd del usuario que inició sesión
aplicación(con).open =driver={Controlador de Microsoft Access (*.mdb)};dbq=&application(db)
bloqueo.de.aplicación
solicitud (en línea) = solicitud (en línea) -1
aplicación(con).Execute (actualizar amigos configurados en línea=0 donde id=&session.contents(id))
aplicación.desbloquear
aplicación(con).cerrar
terminar si
Subtítulo final
</guión>
===============
En este punto, se ha completado el código completo. Debido a que el objeto Servidor no se puede utilizar en el evento OnEnd de Aplicación y Sesión, la base de datos
La dirección física de la conexión y la base de datos en el servidor (d:inetpubwwwroot bs.mdb) se almacena en la variable de la aplicación y
Preprocesado en el evento Application_OnStart. De la misma manera, session(pass) no se puede utilizar en lugar de session.contents en el evento Session_OnEnd.
(pase) (explicación detallada a continuación).
4. Dos puntos dignos de atención en los ejemplos de este artículo.
⒈session.contents en el evento OnEnd
Los amigos que acaban de empezar a ponerse en contacto con global.asa suelen consultar el evento Session_OnEnd anterior.
si session.contents(pass) entonces se escribe como
si la sesión (aprobada) entonces,
En este caso, el sistema no generará un error, pero el contenido posterior nunca se ejecutará. Esto se debe a que el objeto Session tiene prohibido usarse en el evento OnEnd.
Pero las variables de sesión se pueden llamar usando una colección de objetos de sesión. Debido a que IIS no mostró ningún mensaje de error, el autor perdió mucho tiempo en esto.
entre. ¡Espero que todos puedan aprender de esto!
⒉Cuando se usa Server.MapPath para obtener la dirección física de la base de datos en el evento Application_OnStart, se debe usar la dirección absoluta. Para ilustrar este problema, puede.
Hagamos un experimento: cambie el evento Application_OnStart anterior
application(db)=Server.MapPath( bs.mdb) se cambia a:
aplicación(db)=Servidor.MapPath(bbs.mdb)
Luego cree un subdirectorio de prueba en el directorio d:inetpubwwwroot y escriba un temp.asp en el directorio de prueba.
====prueba.asp====
<%respuesta.escribir aplicación(db)%>
=================
Luego copie temp.asp y colóquelo en el directorio raíz (d:inetpubwwwroot). Abra global.asa con el bloc de notas y luego abra dos navegadores, el navegador A
Ingrese la dirección http://localhost/temp.asp y presione Enter. Aparecerá lo siguiente en el navegador:
d:inetpubwwwroot bs.mdb
Luego, haga clic en el menú Archivo en la ventana del Bloc de notas y seleccione Guardar (para cambiar la hora de modificación de global.asa, lo que provocará que IIS reinicie todos los servicios), y luego haga clic en
Ingrese la dirección http://localhost/test/temp.asp en el navegador B y presione Enter. La salida en el navegador es:
d:inetpubwwwrootestbs.mdb
Aunque el archivo global.asa se coloca en el directorio raíz del sitio, si se utiliza una dirección relativa en server.mappath, se activa Application_OnStart.
Si la página visitada por el usuario del evento por primera vez no pertenece al directorio raíz, obtener la dirección física de la base de datos no será el resultado esperado, espero que todos tengan especial cuidado.