el código:¿Por qué/cuándo las escrituras de sesión son vulnerables a la terminación de subprocesos?
Session["foo"] = "bar";
Response.Redirect("foo.aspx");
EL PROBLEMA:
Cuando foo.aspx lee "foo" de la sesión, que no está ahí. La sesión está allí, pero no hay ningún valor para "foo".
He observado esto de forma intermitente en nuestro entorno de producción. Pero no me refiero aquí para preguntar a question about Response.Redirect().
LA EXPLICACIÓN:
Bertrand Le Roy explica (la negrita es mía):
Ahora, lo redirección hace es enviar una cabecera especial al cliente para que se pide al servidor para una página diferente que la que estaba esperando. del lado del servidor, después de enviar este encabezado , redirigir finaliza la respuesta. Esto es algo muy violento. Response.End realmente detiene la ejecución de la página dondequiera que esté usando una ThreadAbortException. Lo que sucede realmente aquí es que el token de sesión se pierde en la batalla.
Mi conclusión es que Response.Redirect() puede ser pesado con los hilos finales. Y eso puede amenazar mis escrituras de sesión si ocurren demasiado cerca de esa mano dura.
LA PREGUNTA:
¿Qué pasa con ASP.NET gestión de sesiones hace que sea tan vulnerable a esto? La línea de código Response.Redirect() no comienza su ejecución hasta que la línea de escritura de la sesión está "terminada". ¿Cómo puede ser una amenaza para la escritura de mi sesión?
¿Qué ocurre con la escritura de la sesión que no "finaliza" antes de que se ejecute la siguiente línea de código? ¿Hay otros escenarios en los que las grabaciones de sesión se pierden de manera similar (como si nunca se hubieran producido)?