2008-11-16 51 views
14

Tengo un objeto principal de seguridad personalizado que configuré en el archivo global.asax para el hilo actual y todo está bien, sin problemas normalmente.Asp.net System.Web.HttpContext.Current.Session null en global.asax

Sin embargo, solo estoy agregando una característica de imagen dinámica haciendo que una página sirva la imagen y cada vez que esa página de imagen dinámica se carga, System.Web.HttpContext.Current.Session es nula en global.asax lo que me impide desde establecer el principio de seguridad como normal y problemas en cascada desde ese punto en adelante.

Normalmente, la sesión es nula en global.asax solo una vez durante una sesión al inicio cuando el usuario inicia sesión, después siempre está disponible con esta única excepción.

La página de imagen dinámica se carga cuando el navegador se encuentra con una taje imagen en la página original, es decir

supongo que esto es algún aspecto del hecho de que el navegador está solicitando que la página sin necesidad de enviar algunas credenciales ¿con eso?

Cualquier ayuda sería muy apreciada.

Respuesta

25

Juan,

Estoy asumiendo que usted está utilizando un controlador ashx para el controlador. Si es así, asegúrese de obtener de IRequiresSessionState por ejemplo:

public class Images : IHttpHandler, System.Web.SessionState.IRequiresSessionState 
{ } 

Si usted no está usando un ashx puede describir lo que entendemos por página imagen dinámica?

Josh

+1

Hola Josh, eres mi persona favorita en este momento!:) No, estaba usando una página aspx estándar porque todos los ejemplos sobre manejadores mencionados usando una extensión de archivo y cambios de configuración, no sabían nada sobre ashx, lo intentaron, y sí requirió la derivación que mencionaste. Funciona perfectamente. ¡Aclamaciones! – JohnC

+1

Heh impresionante! Me encantan los manejadores de ashx. He usado uno para extraer imágenes de una base de datos que funciona realmente bien. También descubrí que si haces un servicio de POX, el ashx funciona muy bien. – JoshBerke

3

La sesión no tiene nada que ver con la sesión iniciada o no.

¿Qué evento anula cuando desea acceder a la sesión? La sesión no está disponible hasta que se haya disparado AcquireRequestState.

Para obtener más información, ver: http://msdn.microsoft.com/en-us/library/9ysfzy8h.aspx

+1

La sesión tiene todo que ver con mi principio comercial personalizado. El problema radica en que la sesión es nula solo para esta página, los 50 más o menos de esta gran aplicación no presentan este problema. Accedo a Session desde Application_PostAuthenticateRequest donde normalmente no es un problema. – JohnC

+1

En aras de este problema, simplemente ignore toda la parte principal del negocio, el problema fundamental es que Session es nula solo para este tipo de página. – JohnC

+0

Jon ¿qué tipo de página es? ¿Es esto un aspx? o ashx? – JoshBerke

0

sí tienes razón Esto sucede porque los confictos objeto dependencia podrían, en caso de otra página de transferencia en paralelo que puede romper la barrera entre sesiones

8

en Global.asax.cs Session_Start() y Session_End() necesitas usar "this.Session" !! La razón de esto es que HttpContext solo está disponible cuando hay una solicitud que se está procesando. ¡Es por eso que obtienes un NULL en HttpContext.Current.Session!

Del sitio web de Microsoft: "HttpContext Class: Encapsula toda la información específica de HTTP sobre una solicitud HTTP individual."

Pero no te sientas mal ... ¡me enamoré de esta también! :)

Cuestiones relacionadas