2011-08-08 14 views
6

Solo tengo una pregunta sobre la gestión de sesión en ASP .NET. He analizado las 3 opciones dentro de IIS (InProc, StateServer y SQL Server) y tengo problemas para implementar la persistencia de sesión en varios servidores y en varias aplicaciones web. ¿Hay otras opciones disponibles para administrar subdominios cruzados de sesiones (del mismo padre), así como también para múltiples aplicaciones web en cada dominio?Gestión de sesión en ASP .NET

Le daré un ejemplo: Imagine un sitio www.thisismysite.com.au. Cuando inicio sesión, voy a login.thisismysite.com.au. aunque navegando por el sitio, voy a www.thisismysite.com.au/MyWebApp/. Lo que intento lograr es que la sesión persista en los tres enlaces. Conozco una herramienta de terceros que puede hacer esto, Groat SessionFarm, pero me pregunto si hay otros por ahí. Además, hay una combinación de SSL/no SSL si eso hace alguna diferencia.

Nota: No me preocupa la identidad, podría implementar Windows Identity Foundation (o similar) y enviar reclamaciones en torno a los tres lugares. Estoy después de la persistencia de la sesión.

Gracias montones, Lee

EDIT: Terminé yendo con un tercer partido pedazo de código que podemos personalizar para nuestros propósitos. Funciona perfectamente, y al comprar el código fuente podemos actualizarlo según sea necesario.

Respuesta

0

¿Suena como lo que podría querer es el almacenamiento en caché distribuido?

Este post le puede dar algunas opciones para mirar - Distributed Cache/Session Solution for ASP.NET Web App

que soy un poco nuevo en la zona, pero estoy trabajando en el uso de Microsoft Azure AppFabric almacenamiento en caché de estado de sesión en mi actual MVC/ASP. Proyecto NET, ya que las aplicaciones web Azure no proporcionan buenas opciones para el estado de la sesión inherentemente.

Creo que los enlaces en la publicación mencionada anteriormente son similares al almacenamiento en caché de AppFabric de Azure y también pueden manejar el estado de la sesión. Aunque no he trabajado con ninguno de ellos, no puedo garantizar la fiabilidad. Solo comencé este aspecto en mi propia aplicación este fin de semana.

Greg

+0

Miré AppFabric de Azure y por lo que puedo decir que funciona como una versión más grande de un StateServer, lo que significa que no puedo sesiones de compartir a través de diferentes aplicaciones web (ya sea sub dominio o sub aplicación). Sin embargo, funcionará para el mismo sitio/aplicación en varios servidores. – lkoutzas

0

Una opción es la gestión de estado de sesión a través de SQL Server o se puede mirar en algo así como NCache a administrar el estado a través de múltiples servidores.

+0

, sí, pero eso no funciona con múltiples aplicaciones (aplicaciones web sub o subdominios) – lkoutzas

0

Servidor de estado o servidor SQL debería funcionar. Al menos para http. La solicitud de Https puede necesitar finalizar en la misma IP ... No estoy seguro de eso.

también podría usar un equilibrador/interruptor de carga de hardware que mantenga las sesiones. Envían la solicitud inicial de un usuario a un servidor, y las siguientes solicitudes de ese usuario se envían siempre al mismo servidor. (O intentan)

Eso es para sesiones de intercambio para una sola aplicación web, pero para compartir las sesiones entre las aplicaciones lo que hago en mi trabajo es utilizar sesiones ASP clásico (para compatibilidad con sistemas existentes, pero también es válida asp.net), cuando el usuario inicia sesión, se crean en asp y se leen desde un archivo llamado sessions.asp (el nombre no importa) ese archivo devuelve los valores cuando se llama desde .net haciendo una solicitud web.

Por ejemplo: sessions.asp? Session_name = username recibe una llamada desde cualquier aplicación local de .NET y responde "John", por lo tanto, "John" está dentro de la sesión ["session_name"] y sessions.asp (o aspx, php o lo que quieras) simplemente escribe texto en la respuesta.

No estoy seguro si se explica claramente ... Es una manera sucia y fácil de hacerlo. En mi empresa lo usamos para unos 300 usuarios simultáneos que tienen toneladas de sesiones cada uno, y parece funcionar muy bien. Espero eso ayude. ;-)

-1

Una de las formas más sencillas de manejar múltiples aplicaciones de Internet usando caché en lugar de sesión.

En ese caso, la clave de caché será la combinación de IP de ubicación de usuario y de usuario. Desde caché nunca será vencido por defecto por lo que debe conscientes de duración de la caché

int timeout=20; 
string key= userid+System.Web.HttpContext.CurrentRequest.ServerVariables("REMOTE_ADDR"); 

//Set 
Cache.Insert(key, value, null, DateTime.Now.AddMinutes(timeout), Cache.NoSlidingExpiration);  

//Get 
var value=Cache[key]; 

Durante cierre de sesión no se olvidó de eliminar el cache

Cache.Remove(key); 
1

servidor de estado o el almacenamiento en SQL Server debería funcionar bien para lo lo que intenta hacer, incluso en varias aplicaciones, pero debe recordar que todas las aplicaciones deben tener la misma MachineKey.

ASPNET-load-balancing-and-ASPNET-state-server

HTH

Cuestiones relacionadas