2009-07-10 10 views
6

Sé que es una pregunta simple, pero parece que no puedo sacarla del ruido de Google. Sé que .NET puede usar un servicio de estado de sesión o una base de datos SQL para respaldar su estado de sesión, pero no sé si ASP ofrece alguna opción fuera de proceso para almacenarla. ¿Tiene alguna, o estoy atascado con la pérdida de variables de sesión en aplicaciones ASP cuando un servidor con equilibrio de carga se desconecta?¿Está en proceso la única forma en que el ASP clásico puede almacenar el estado de la sesión?

Respuesta

4

Sí, sólo en la memoria

De MSDN Full Article

ASP Implementación

El nativo de sesiones ASP sólo puede almacenar datos de sesión en la memoria. Para almacenar los datos de la sesión en SQL Server, se escribe un objeto COM de Microsoft® Visual Basic® 6.0 personalizado para administrar el estado de la sesión en lugar de utilizar el objeto de sesión nativo. Este objeto COM se creará una instancia al comienzo de cada solicitud web y volverá a cargar los datos de sesión desde SQL Server. Cuando finalice el script ASP, este objeto finalizará y el estado de la sesión volverá a SQL Server.

El objetivo principal del objeto de sesión COM de Visual Basic 6 es proporcionar acceso a los objetos intrínsecos del Microsoft Internet Information Server. El objeto de sesión COM de Visual Basic 6.0 utiliza la clase mySession del ensamblado SessionUtility para contener el estado de la sesión y la clase SessionPersistence de SessionUtility para cargar y guardar datos de sesión con SQL Server. Las clases mySession y SessionPersistence están expuestas como objetos COM utilizando la utilidad regasm.exe. La utilidad regasm.exe puede registrar y crear una biblioteca de tipos para que el cliente COM consuma clases de Framework.

La información del estado de la sesión se vuelve a cargar durante la construcción del objeto. El constructor (class_initialize) primero recuperará la cookie de sesión, el tiempo de espera de la sesión (SessionTimeOut) y la cadena de conexión de la base de datos (SessionDSN) del objeto Application y crea una instancia de la clase mySession para contener los datos de la sesión. Luego, el constructor intentará volver a cargar los datos de sesión de SQL Server con la cookie dada. Si SQL Server no tiene la información de sesión, o la sesión ha expirado, se emitirá una nueva cookie. Si SQL Sever regresa con los datos de estado de la sesión, el estado de la sesión se almacenará en el objeto mySession.

+0

Excelente hallazgo, muchas gracias! – Chris

+0

No estoy seguro de por qué el objeto COM debe escribirse en Visual Basic 6.0, podría ser cualquier lenguaje, siempre que el resultado sea un objeto COM invocado por un lenguaje de script utilizado en ASP. – AnthonyWJones

4

No hay nada más incorporado, aunque en ASP Classic es bastante fácil crear su propio sistema de gestión de sesiones. forma más simple de ser una tabla en una base de datos como el siguiente:

SessionID int PK, de texto Campos, texto Valores, Expira DateTime

llegar a algún tipo de CSV codificador/decodificador para los campos y valores y poblar una colección en cada página. A continuación, guárdelo una vez que la página se ejecuta y actualice el tiempo de caducidad. Luego solo haga que una cookie haga un seguimiento de la ID de la sesión o páselo por la cadena de consulta.

Cuestiones relacionadas