Cualquiera que haya escrito un ASP un poco más grande sabe que el objeto Session es realmente fácil de usar. Puede usarse para registrar las variables de datos privados del usuario, lo cual es seguro y conveniente. ¿Pero sabes realmente cómo funciona Session? Cualquiera que haya escrito un ASP un poco más grande sabe que el objeto Session es realmente fácil de usar. Puede usarse para registrar las variables de datos privados del usuario, lo cual es seguro y conveniente. ¿Pero sabes realmente cómo funciona Session? Quizás después de comprenderlo ya no te atrevas a utilizar este objeto tan querido y odiado. Aunque el método alternativo es un poco problemático, después de una consideración a largo plazo, hay que hacerlo.
Primero, hablemos de los beneficios de Session. Se puede utilizar para registrar las variables de datos privados del cliente y no desaparecerá dentro del rango de tiempo. Esta es realmente una función importante, especialmente para sistemas con miembros que deben usarse. Como la cuenta de inicio de sesión del miembro, la hora, el estado y muchos datos en tiempo real que deben registrarse (como el sistema de compras que registra los artículos en la cesta de compras del usuario). Esta información es necesaria de forma privada para cada usuario y generalmente la utilizan los desarrolladores. Procesamiento de registros de sesión.
Sin embargo, la Sesión en ASP se compone de Cookies y el servidor transmite todos los datos registrados en la Sesión al navegador del usuario en forma de Cookies. Por lo general, los navegadores generales almacenarán estas cookies cada vez que el usuario haga clic en un enlace y se conecte nuevamente al servidor, el navegador enviará estas cookies al servidor para su procesamiento. Este es el principio operativo de Session. Cuando la cantidad de datos es mayor, dado que deben enviarse y recuperarse, no solo consume ancho de banda de la línea, sino que también reduce el rendimiento porque el servidor debe gastar más recursos en el procesamiento y la reconfiguración en línea. Memoria. Acción inicial. Ahora quizás estés pensando: "Tengo que usar esta función, así que tengo que sacrificarla". Sin embargo, este artículo habla de Session, por un lado, y por el otro, te enseña a usarlo menos; hay alternativas. Lo siguiente que surge es que también pertenece al objeto Aplicación Global.asa.
La aplicación también es buena para registrar y procesar datos temporales. Sus capacidades y uso son los mismos que los de Session en todos los aspectos. Sin embargo, en comparación, los datos que registra son públicos, es decir, un espacio variable que puede ser compartido por cualquier usuario. A diferencia de la sesión, la aplicación no transfiere datos al usuario y espera a que la siguiente conexión los lea. Se registra directamente en la memoria del servidor. En comparación, el rendimiento es mucho más rápido que la sesión.
Dado que el objeto Aplicación es público, lo primero que se debe hacer es planificar un área común para cada usuario, de modo que cada usuario pueda tener su propia área para registrar datos, para lograr el propósito de simular la Sesión. Hay dos enfoques ahora:
1. Inicialice, cree y asigne espacio de memoria del usuario por adelantado cuando se activa el servidor. Por lo general, aunque este método ocupa muchos recursos tan pronto como se inicia el servidor, también evita la molestia de tener que asignarlo cada vez que el usuario. está en línea en el futuro. Pero hay una limitación: este método debe limitar el número máximo de personas. Dado que se inicializa tan pronto como se activa, solo podemos estimar la creación de una cierta cantidad de espacio de memoria, por lo que este método generalmente se usa en programas pequeños. como salas de chat.
2. Este método debe considerarse más apropiado para aplicaciones a gran escala. Adopta un método de asignación dinámica y comienza a asignar recursos al usuario cuando el usuario se conecta por primera vez al servidor. El propósito de estos dos métodos de simulación de sesión es reducir el consumo de recursos de sesión, pero después de todo, no se pueden reemplazar por completo. Todavía necesitamos usar un poco de sesión, lo que al menos puede reducir mucha carga. Servidor.
Primera opción
Primero comenzamos la implementación de la primera solución. Dado que la aplicación se inicializa durante la activación, por supuesto tenemos que comenzar desde Global.asa:
La inicialización se ha completado, pero ¿cómo utilizarla? Solo necesitamos cambiar los datos almacenados originalmente usando la Sesión, como el número de cuenta y la hora de inicio de sesión, en el objeto Aplicación que creamos donde el usuario inicia sesión:
Copie el código de código de la siguiente manera:
'Busca espacio no utilizado
Para i = 1 a la aplicación (ClienteMax)
Si Aplicación (User_Status_ & i) = 0 Entonces
'Número temporal de usuario
Sesión (índice) = i
'cierre
Aplicación Aplicación.Bloqueo
'Establecido en estado usado
Aplicación(User_Status_ & i) = 1 'Poner datos variables
Aplicación (User_Account_ & i) = Cuenta
Aplicación (User_Logtime_ & i) = Ahora()
'Descubrir
Aplicación.Desbloquear
Salir por
Terminar si
Próximo
Para obtener datos variables relacionados con el usuario, haga lo siguiente:
Respuesta.Escribir (Aplicación (Cuenta_usuario_ y sesión (Índice))
Quizás descubras que ¿no se dice que no se debe usar Session? Entonces, ¿por qué la sesión todavía existe en el código fuente anterior? Como se mencionó anteriormente, esta alternativa no puede reemplazar completamente la sesión. El navegador no siempre está en línea con el servidor. Se desconectará después de leer la página. Entonces, ¿cómo sabemos que la misma persona está conectada la próxima vez? En este momento, debemos confiar en la sesión. Le damos al usuario un conjunto de números en tiempo real. Este número es el número del espacio variable del usuario en la Aplicación. Puede imaginar que tiene muchas cajas fuertes. una llave, y la llave tiene un número, y el número de la llave le permite al empleado guiarlo a su propia caja fuerte. Todavía hay mejoras en este método, pero es suficiente para aplicaciones pequeñas.
Segunda opción
Con respecto a la solución anterior, también puede pensar que nuestros números personalizados se registran mediante Sesión. Hablando de números, el objeto Sesión proporciona un método "SessionID". Así es, independientemente de si queremos usarlo o no, el Servidor asignará automáticamente un número a cada usuario, y este número no se repetirá. En cuanto a este número, se obtiene usando Session.SessionID. Esta numeración es una acción que Session definitivamente hará. Podemos usarla para reemplazar el programa de numeración que escribimos nosotros mismos, lo que también ahorra mucho esfuerzo e incluso proporciona una mayor escalabilidad. Pero básicamente, la primera solución anterior todavía tiene sus usos, como aplicaciones pequeñas como salas de chat que limitan el número de personas. La siguiente alternativa es para sistemas más grandes.
Para sitios web con cientos, miles o incluso decenas de miles de visitantes por segundo, la solución anterior definitivamente no funcionará. Suponga que establece el límite superior de la cantidad de personas en 10,000. Una vez activado, el servidor lo ayudará a recortar 10,000 áreas para 10,000 usuarios. Si hay 5 variables en un área y una variable ocupa 32 bytes, 10,000 ocupan más. de 320000 K (320 MB), servidor Tan pronto como se activa, se acumula mucha basura en la memoria y el rendimiento seguramente se reducirá mucho antes de entrar al campo de batalla. No mires estos pequeños números y pienses que tus 512 MB serán; suficiente Los números anteriores suponen un número mínimo, además Se desconoce cuántos recursos adicionales utilizará el servidor al configurar la memoria, por lo que solo serán más, no menos. Por lo tanto, la única solución es configurar dinámicamente el espacio de variables del usuario y solo recortar un área cuando un usuario esté conectado al servidor. De esta manera, no es necesario configurar una gran cantidad de memoria por adelantado.
La segunda opción es relativamente sencilla de implementar. Deseche todo lo que hay en la primera opción. No necesitamos tocar Global.asa. Solo necesitamos cambiar el lugar de inicio de sesión del usuario y otros lugares útiles.
Copie el código de código de la siguiente manera:
'LockApplicationApplication.Lock 'Poner datos variables
Aplicación (User_Account_ & Session.SessionID) = Cuenta
Aplicación (User_Logtime_ & Session.SessionID) = Ahora() 'Desbloquear aplicación.Desbloquear
Para obtener datos variables relacionados con el usuario, haga lo siguiente:
Copie el código de código de la siguiente manera:
Respuesta.Escribir(Aplicación(Cuenta_Usuario_ y Sesión.IDSesión))
En el pasado, leí muchos libros que decían que las sesiones consumen muchos recursos, así que trate de no usarlas, pero aún así debe usarlas cuando sea necesario, y los libros no enseñan ninguna solución más apropiada. Ahora que sabes cómo reemplazar Session, ¡aprovéchalo! ¡Quizás los problemas de rendimiento que siempre me han preocupado se puedan mejorar mucho!