El problemaBuenas Prácticas para pasar datos entre páginas
En la pila que nos re-uso entre los proyectos, que están poniendo un poco demasiados datos en la sesión para pasar datos entre las páginas. Esto fue bueno en teoría porque evita la manipulación, los ataques de reproducción, etc., pero crea tantos problemas como resuelve.
La pérdida de sesión en sí es un problema, aunque es en su mayoría manejado mediante la implementación de Servidor de estado de sesión (o mediante el uso de SQL Server). Más importante aún, es complicado hacer que el botón Atrás funcione correctamente, y también es un trabajo extra crear una situación en la que un usuario pueda, por ejemplo, abrir la misma pantalla en tres pestañas para trabajar en diferentes registros.
Y eso es solo la punta del iceberg.
Existen soluciones para la mayoría de estos problemas, pero a medida que avanzo, toda esta fricción me da la sensación de que pasar los datos entre las páginas que usan la sesión es la dirección incorrecta.
Lo que realmente quiero hacer aquí es crear una práctica recomendada que mi tienda pueda usar todo el tiempo para pasar datos entre páginas, y luego, para nuevas aplicaciones, reemplazar las partes clave de nuestra pila que actualmente dependen de Session. .
También estaría bien si la solución final no da como resultado montañas de código de plomería.
soluciones propuestas
Sesión
Como se mencionó anteriormente, apoyándose en Sesión parece como una buena idea, pero se rompe el botón atrás y hace que algunos otros problemas.
Puede haber formas de evitar todos los problemas, pero parece mucho trabajo extra.
Una cosa que es muy agradable sobre el uso de la sesión es el hecho de que la manipulación no es un problema. En comparación con pasar todo a través de QueryString no encriptado, terminas escribiendo mucho menos código de protección.
cruzada página de publicación
En verdad apenas he considerado esta opción. Tengo un problema con qué tan estrechamente acoplado hace las páginas, si empiezo a hacer PreviousPage.FindControl ("SomeTextBox"), eso parece un problema de mantenimiento si alguna vez quiero acceder a esta página desde otra página que quizás no tenga un control llamado SomeTextBox.
Parece limitado en otras formas también. Tal vez quiero llegar a la página a través de un enlace, por ejemplo.
cadena de consulta
Actualmente estoy inclinando hacia esta estrategia, al igual que en los viejos tiempos. Pero probablemente quiera encriptar mi QueryString para que sea más difícil de manipular, y me gustaría manejar el problema de los ataques de repetición también.
En 4 tipos de Rolla, there's an article about this.
Sin embargo, debería ser posible crear un HttpModule que se encargue de todo esto y elimine toda la encriptación de salchichas de la página. Efectivamente, Mads Kristensen has an article where he released one. Sin embargo, los comentarios lo hacen parecer que tiene problemas con escenarios extremadamente comunes.
Otras opciones
Por supuesto, esto no es una mirada a las opciones exaustive, sino más bien las principales opciones que estoy considerando. This link contiene una lista más completa. Los que no mencioné, como Cookies y Caché, no son apropiados para pasar datos entre páginas.
En el cierre ...
Entonces, ¿cómo está manejando el problema de pasar datos entre las páginas? ¿Qué trampas ocultas tenía que solucionar, y existen herramientas preexistentes que solucionen todo sin problemas? Do ¿Sientes que tienes una solución con la que estás completamente satisfecho?
¡Gracias de antemano!
Actualización: Sólo en caso de que no estoy siendo lo suficientemente claro, por 'pasar datos entre páginas' Estoy hablando, por ejemplo, pasando una clave IdCliente desde una página CustomerSearch.aspx a Customers.aspx, donde se abrirá el cliente y podrá editarse.
Del mismo modo que el cifrado de comentarios en sí mismo no resuelve realmente el aspecto de seguridad de pasar identificadores en QueryString, simplemente hace que sea mucho más difícil de moderar con ellos. En una aplicación segura, usted tiende a tener algún tipo de identidad en sesión, digamos el nombre de usuario. Entonces, si tiene una página Orders.aspx? OrderId = 1, en sus capas inferiores (servicio/negocio) siempre puede poner en la lógica de validación para asegurarse de que la orden recuperada por esta identificación en realidad pertenece al usuario que está conectado a la aplicación. – e36M3
@ e36M3: Buen punto. Esta herramienta no indica cómo se almacena su ID de usuario, es solo una capa sobre Solicitud y redireccionamiento. Por lo tanto, ciertamente podría usarse de esa manera, solo necesitaría almacenar su ID de usuario en sesión y escribir el código de validación. Definitivamente estoy haciendo la parte de validación ahora, aunque debo admitir que estoy almacenando el ID de usuario en una cookie cifrada que no es perfecta. Pero quiero intentar no confiar en la sesión en absoluto. Y estos no son proyectos de alto perfil. Siempre hay margen de mejora .. –
por favor ¿puedes publicarlo en github? Puedes resolver el problema de otra persona ... – CodeArtist