2010-05-07 19 views
9

Lo sé en el servidor de la comunidad <sessionState mode="Off" />, lo que significa que no puede usar Sesiones, y hace unos años recuerdo que estaba trabajando en un sitio web donde no teníamos permiso para usar sesiones.
En mi punto de vista, las sesiones son una herramienta muy útil si nos las arreglamos para usar de la manera correcta, pero ¿está mal usar la variable de sesión en un sitio web, cuando es malo y cuándo no?Al usar Sesiones es malo, y ¿qué tiene de malo?

Actualización
Y ¿Qué podemos utilizar en su lugar para evitar su desastre?

Respuesta

8

Las sesiones no son malas per se. Pero tampoco deberían ser abusados. Debe evitar especialmente el "Oh, necesito esta información aquí y aquí, almacénela en la sesión y vuelva a utilizarla más adelante".

En lugar de hacer un diseño de OO adecuado donde la información se transmite correctamente en los parámetros, la sesión se utiliza como un almacenamiento no organizado de almacenamiento, lo que conduce a un posible desastre.

Tal estado global también impide la capacidad de prueba. Una gran sesión no organizada también conduce a un mayor uso de la memoria. Una alternativa al estado de la sesión puede ser viewstate, por ejemplo.

(no sé si habla acerca del estado de la sesión, o todo el concepto de sesión. Si es esto último, mi respuesta no es realmente apropiado)

2

Sesiones caducan es volátil por lo que podría suceder que el tiempo y las sesiones tal modo que sea un signo menos

0

Usted no quiere usar sesiones para almacenar información privada tampoco. Más o menos cómo las personas intentan almacenar contraseñas directamente en las cookies, lo que también es un no-no.

1

Las personas aún tienen miedo de aceptar cookies, que se requieren para usar las sesiones. Además, hay problemas de seguridad.

+0

Existen sesiones sin cookies (aunque tienen su propio conjunto de problemas). – ChristopheD

+0

Sí, consultas de sesiones basadas en cadenas, por ejemplo. Podría pasar toda la noche discutiendo en contra del uso de ellos. :) – Johan

+0

puedes argumentar contra ellos todo lo que quisieras, no los hará existir menos. – R0MANARMY

2

Una de las razones principales por las que wouldn' t desea utilizar Sesiones en el entorno de producción es que el SessionID se pasa a través de cookies (al menos en JSP). Y no puede garantizar que su cliente tenga las cookies activadas todo el tiempo. Por lo tanto, incluso si usa Session, se recomienda que también implemente Reescribir URL. Como resultado, el Contenedor usaría la Sesión así como la Reescritura de URL para la primera solicitud (a fin de determinar si las cookies están habilitadas). Y usaría la sesión si el cliente acepta cookies. De lo contrario, se convertiría en reescritura de URL.

Tenga en cuenta que al utilizar la reescritura de URL, deberá asegurarse de que la respuesta tenga la URL codificada. Además, si usa Session, tendrá que tener en cuenta los eventos impares como el seguimiento de sesión para más de un navegador en el mismo sistema.

0

Esa es una pregunta interesante y estoy de acuerdo en que las sesiones pueden ser muy complicadas si no se usan correctamente. Un enfoque para mitigarlo es tener todo un objeto complejo (como el contenido del carrito de compras) almacenado en una sesión en lugar de tener varias sesiones repartidas en la misma aplicación web. Las sesiones se pueden almacenar en la base de datos de SQL Server en caso de un corte de energía.

+0

"almacenado en una sesión en lugar de tener múltiples sesiones derramadas ..." ¿qué? –

2

A veces el estado de sesión solo existente mata el rendimiento. En serio, poner un solo valor booleano allí puede MATAR tu rendimiento en algunos casos.Aquí hay un ejemplo específico:

Tiene una página de tablero y aloja varios pequeños módulos que cargan su contenido a través de ajax. Si está utilizando la sesión, solo puede cargar un módulo a la vez porque la sesión está bloqueada (por usuario) durante una solicitud. Si la sesión no se está utilizando, no hay bloqueo, y el navegador podrá solicitar la cantidad máxima de recursos (4 o más al mismo tiempo).

Ver "peticiones concurrentes y el estado de sesión" aquí:

http://msdn.microsoft.com/en-us/library/ms178581.aspx

Si se encuentra con este, o bien no utiliza la sesión, o se establece en sólo lectura (esto es difícil de hacer en ASP.NET MVC la última vez que lo comprobé).

Actualización: Otros dos escenarios del mundo real en que esto puede ocurrir:

  • Tienes una página asp.net que escribe las imágenes a una respuesta binaria. Haga esto porque necesita verificar permisos u otras condiciones para determinar si se debe mostrar y qué imagen desea mostrar. Si tiene un grupo de etiquetas de imagen que hacen referencia a esta página en su SRC para buscar imágenes, solo podrá obtener una a la vez.
  • Tiene una consola de administración que le permite administrar tareas. Desea poder presionar un botón y comenzar las tareas en el servidor de forma asincrónica con barras de progreso ajax. Si sus llamadas ajax solicitan páginas asp cuando tiene una sesión (ya sea que se refiera o no), solo podrá ejecutar una a la vez. Supongo que esto es similar al ejemplo del panel pero en realidad me encontré con este y me mató.