2010-02-24 12 views
7

Cómo puedo configurar una página web ASP.Net para que caduque, de modo que si el usuario hace clic en el botón Enviar, obtendrá un error de página caducada si se presiona el botón Atrás del navegador para intentar ir volver y presionar enviar de nuevo?expirar ASP.Net página

Respuesta

2

En primer lugar, utilice Post-Redirect-Get pattern cuando el usuario envíe el formulario. Esto evitará que puedan usar el botón Atrás fácilmente. Para hacer esto, todo lo que necesita hacer es emitir una llamada Response.Redirect() después de que termine de procesar el formulario, incluso si se trata de la misma URL.

En segundo lugar, podría considerar el uso de un campo único de identificación en el formulario vinculado al proceso de envío, de modo que si se completa el envío, no se puede volver a utilizar el mismo ID. La idoneidad de esto dependerá de lo que estés haciendo.

+0

Parece una buena sugerencia si comenzáramos nuestra aplicación desde cero, pero tenemos una aplicación existente que solo necesito una solución rápida, demasiado trabajo para volver a diseñar todo. –

+0

Estas son en general implementaciones bastante simples. ¿Quieres decir que no puedes cambiar ningún código? – womp

+0

Podemos cambiar el código, pero esperaba algo así como simplemente establecer una propiedad en la página para desactivar el almacenamiento en caché de la página. –

3

Utilice HttpResponse.Cache para controlar la capacidad de almacenamiento en caché de la página. Esto le da control sobre opciones tales como la caducidad de la página desde la caché y los encabezados HTTP de Cache-Control.

+1

He consultado el enlace que proporcionó, pero no estoy seguro de dónde va el código, si lo ejecuto desde la función Page_Load, aún puedo presionar el botón de retroceso del navegador para volver y volver a enviar la página. –

+0

También tengo una página con este problema. He configurado cada configuración de caché que puedo encontrar para evitarlo, pero todavía tengo usuarios que logran volver y enviar de nuevo. Cuando lo intento, aparece un error de "página expirada", pero supongo que algunos navegadores y/o configuraciones ignoran ese material y muestran la página desde el caché. Tengo un código para evitar que el segundo envío cause un daño, pero no previene la molestia. – Ray

0

Por lo que entiendo, hay dos partes a su pregunta:

1 - Detener botón el navegador de vuelta - que no funciona & me-piensa que nunca debemos dejar que el usuario presiona la espalda. Por lo tanto, tal vez usted podría utilizar etiqueta META de expirar el contenido para que el usuario vea un "contenido expiró" página & tiene que recargar para obtener el contenido más reciente

2 - parada múltiple POSTAL - por definición, post no es indempotente es decir. múltiples operaciones de POST deberían ser posibles. Un posible mecanismo es desactivar el botón POST/SUBMIT después de que se haya completado la primera publicación. Por lo tanto, el usuario no podrá hacerlo la segunda vez.

HTH.

+0

No tenía intención de desactivar el botón Atrás, solo quiero caducar la página para que cuando se presione el botón Atrás, el usuario obtenga un error de "página caducada". He agregado algunos javascript para desactivar el botón de enviar en la página original y eso funciona bien en Firefox: el botón de enviar permanece desactivado si el usuario presiona el botón Atrás para volver, pero en IE 7, si el usuario presiona el botón Atrás del navegador, el botón de enviar en la página original se vuelve a habilitar. –