2010-11-24 9 views
7

Tengo un sitio web ASP.NET que usa autenticación de formularios. El tiempo de espera es de veinte minutos.Valores de control perdidos cuando la sesión de autenticación agota el tiempo de espera en ASP.NET

He notado que si un usuario completa un formulario a la mitad y luego se agota el tiempo de espera, se lo redirecciona a la página de inicio de sesión, lo completa y se lo redirige al formulario pero con los controles EMPTY.

Previamente había asumido que ASP.NET usaría algunos skulduggery para volver a llenar los controles de formulario cuando esto ocurra.

¿Hay algún cambio que pueda hacer para asegurarme de que así sea?

Respuesta

1

Creo que la mejor solución para su problema es establecer el atributo slidingExpiration en true en el elemento de autenticación de formularios en web.config. De esta forma, el usuario solo pierde sus datos cuando tarda más de 20 minutos en completar el formulario.

El problema se produce porque asp.net "recuerda" valores que se han ingresado en el formulario mediante un concepto denominado viewstate, que básicamente es solo un campo de formulario oculto. Cuando el servidor hace un redireccionamiento a la página de inicio de sesión, todos los campos de formulario se pierden porque un redireccionamiento no puede contener datos POST.

Si desea que sus usuarios puedan tardar más de 20 minutos en rellenar el formulario, puede considerar tener algún javascript en la página que contiene el formulario, que hace una llamada ajax al servidor cada x minutos. Con la expiración decreciente, esto restablecerá el tiempo de caducidad de la sesión cada vez que se active la llamada ajax, y por lo tanto nunca registrará a su usuario siempre que esté viendo la página que contiene el formulario.

+0

Entiendo que también existe la publicación cruzada de páginas. Pensé que esto podría haber sido un buen mecanismo predeterminado para que viewstate persistiera desde la página original, a través de la página de inicio de sesión y de nuevo a la página original. Pero lamentablemente no! – David

+0

Gracias por la respuesta, por cierto, es lo que estaba buscando. Aunque no me entusiasma la idea de desactivar efectivamente el tiempo de espera de la autenticación. Necesito pensarlo un poco. – David

0

Puede guardar dinámicamente el contenido de cada control en la Sesión tan pronto como se complete adjuntando un estilo AJAX WebMethod al evento onChange.

Al usar este método, la sesión no se caducaría siempre que el usuario completara diligentemente al menos un control cada 20 minutos.

+0

No entiendo esta solución. ¿Cómo modifico el estado de visualización de la página usando JavaScript, considerando que está codificado? ¿Y cómo ayuda almacenar cosas en ViewState cuando no se conserva el ViewState? Sin embargo, la parte de AJAX evitaría el tiempo de espera, como describió Klaus. – David

+0

Page.ViewState en realidad no está disponible desde un WebMethod (hasta donde yo sé) así que modificaré mi respuesta. La única diferencia restante en mi respuesta, entonces, es conectar el AJAX a los eventos onChange. Gracias. – LesterDove

Cuestiones relacionadas