tiempo sesión sesiones sesion seguridad pudo net mvc mantener manejo inicio hacer expirado encontrar duracion como aumentar asp activa asp-classic session-variables

asp-classic - sesión - seguridad login asp net



Buscando un truco para evitar volver a escribir una aplicación sin usar variables de sesión (5)

Mi gerente (que es un hombre de negocios, no un tipo de código), está encaprichado con este sistema. No tiene prisa por reescribirlo. Si reescribiera esto, las únicas variables de sesión utilizadas estarían relacionadas con el inicio de sesión. Me preocupa más el fast of right que el desafortunado :(

Nuestra empresa utiliza una aplicación que originalmente era ColdFusion + Access, convertida posteriormente a ASP + MS Sql clásica para el seguimiento de tareas / tiempos llamado sistema de solicitud. Está desglosado por departamento, por lo que hay uno para MIS, marketing, logística, etc. El problema aparece cuando (principalmente los gerentes) están usando más de uno a la vez, con 2 ventanas de navegador abiertas. El sistema de solicitud utiliza variables de sesión, muchas variables de sesión, "sesión" se hace referencia 2300 veces en la aplicación. Cuando 2 están abiertos a la vez como se puede imaginar, esto hace que todo tipo de anomalías de las variables se mezclen.

Hay una solicitud de MIS de 3 años en el sistema para "arreglar" esto y ha sido trabajado por 3 desarrolladores, y ahora es mi turno de intentarlo. Me preguntaba si alguien más tuvo que trabajar en un proyecto como este, y si hubo algún tipo de truco para tratar de mitigar algunos de los problemas. Estaba pensando en llamar a algo en global.asa para cargar misc. variables de sesión de la cadena de consulta. El problema es que todo está sucediendo así:

If (Session("Application") <> Request("App")) and Request("App") <> "" THEN Session("Application") = Request("App") End If

Al observar las funciones en los archivos de inclusión, tendrá una función con 4 parámetros, que hace referencia a 6 variables de sesión diferentes. Entonces entiendes la idea, esto va a ser doloroso.

¿Alguien ha tenido que hacer algo como esto en el pasado? ¿Algún truco que encuentres útil?


refactorizar el código fuera de la interfaz de sesión directa ("lo que sea"):

  1. crear una API para acceder a la sesión y reemplazar todo el uso existente de la sesión con ella (puede ser una sesión ''clase / objeto'' o solo un archivo de inclusión)
  2. manipule los nombres pasados ​​para las variables de sesión con algo que los haga únicos por dominio de acuerdo a sus necesidades (departamento o lo que sea)
  3. prueba cuidadosamente

luego reescriba todo el asunto más tarde en un lenguaje web moderno y / o encuentre otro trabajo antes de que le pidan que realice otro milagro ;-)


En su clase de sesiones (si va a usar una), cuando haga referencia a cada variable, use un prefijo o algo común para que pueda identificar todas sus variables ... luego puede recorrer todas las variables de sesión y quizás encontrar otras que estén siendo referenciado / creado ...

Private Const PREFIX As String = "MyPrefix_" Public Shared Property MyVariable() As String Get Return HttpContext.Current.Session(String.Concat(PREFIX, "MyVariable")) End Get Set(ByVal value As String) HttpContext.Current.Session(String.Concat(PREFIX, "MyVariable")) = value End Set End Property

bucle para encontrar variables de sesión que no están en su clase

For Each Item As Object In HttpContext.Current.Session.Contents If Not Item.ToString.StartsWith(PREFIX) Then End If Next


Cuantas veces se hace referencia a "Sesión" no significa tanto como parece pensar que lo hace. Además, a menos que haya un error de codificación, tener dos navegadores abiertos debería iniciar dos sesiones separadas, y no debería haber ninguna "mezcla" de los valores para esas sesiones.

Sospecho que puede tener que ver con algo más, como ambas sesiones leyendo de la misma cookie o algunos problemas con las variables de la aplicación. Sin ver toda la fuente, es difícil de decir. Puede valer la pena averiguar si hay alguien más familiarizado con el código para ayudarlo.

Y sí, va a ser doloroso hurgar en el código, pero al menos sabrá más la próxima vez que tenga que arreglar algo. ;)

Además, reescribir no siempre es la mejor opción. Nunca se sabe qué tipo de correcciones divertidas de lógica de negocios / errores se pierden en las reescrituras.


Estoy de acuerdo con AnonJr

Blockquote tiene dos navegadores abiertos y debe comenzar dos sesiones separadas.

tal vez el uso de variables globales estáticas está causando su dataloss