Estoy usando Yahoo Uploader, parte de la biblioteca Yahoo UI, en mi sitio web ASP.Net para permitir que los usuarios carguen archivos. Para aquellos que no están familiarizados, el cargador funciona usando un applet Flash para darme más control sobre el diálogo FileOpen. Puedo especificar un filtro para tipos de archivo, permitir que múltiples archivos para ser seleccionados, etc. Es muy bueno, pero tiene la siguiente limitación documentada:¿Puedo poner una ID de sesión de ASP.Net en un campo de formulario oculto?
Debido a un error de Flash conocido, la subida se ejecuta en Firefox en Windows hace no envíe las cookies correctas con la carga; en lugar de enviar cookies de Firefox, envía las cookies de Internet Explorer para el dominio respectivo. Como solución, sugerimos utilizar un método de carga sin cookies o anexar document.cookie a la solicitud de carga.
Por lo tanto, si un usuario usa Firefox, no puedo confiar en que las cookies persistan en su sesión cuando carguen un archivo. Necesito su sesión porque necesito saber quiénes son. Como solución, estoy usando el objeto de aplicación de esta manera:
Guid UploadID = Guid.NewGuid();
Application.Add(Guid.ToString(), User);
Por lo tanto, estoy creando un identificador único y que sirva como una clave para almacenar el objeto Page.User
en el ámbito de aplicación. Incluyo ese ID como una variable en el POST cuando se carga el archivo. Luego, en el controlador que acepta la carga de archivos, que agarrar el objeto de usuario de esta manera:
IPrincipal User = (IPrincipal)Application[Request.Form["uploadid"]];
funciona de esta realidad, pero tiene dos inconvenientes evidentes:
Si IIS, el grupo de aplicación, o incluso si la aplicación se reinicia desde el momento en que el usuario visita la página de carga y realmente carga un archivo, su "uploadid" se elimina del alcance de la aplicación y la carga falla porque no puedo autenticarlos.
Si alguna vez escala a un escenario de granja de servidores web (posiblemente incluso un jardín web), esto se romperá por completo. Puede que no me preocupe, excepto que planeo escalar esta aplicación en el futuro.
¿Alguien tiene una manera mejor? ¿Hay alguna forma de que pase el ID de sesión de ASP.Net real en una variable POST, y luego use esa ID en el otro extremo para recuperar la sesión?
Sé que puedo obtener la ID de sesión a través del Session.SessionID
, y sé cómo usar YUI para publicarlo en la página siguiente. Lo que no sé es cómo usar ese SessionID
para tomar la sesión del servidor de estado.
Sí, estoy usando un servidor de estado para almacenar las sesiones, por lo que persisten las aplicaciones/reinicios de IIS, y funcionarán en un escenario de granja de servidores web.
Esto es exactamente lo que estaba buscando. ¡Gracias! –
Oye ... el enlace parece estar roto ... ¿puedes actualizar? – Mulki
sí, necesitamos esto! por favor proporcione un nuevo enlace! – pilavdzice