Para facilitar estados de sesión de múltiples pestañas para un usuario sin saturar la URL, haga lo siguiente.
En su función de carga del formulario, incluyen:
If Not IsPostback Then
'Generate a new PageiD'
ViewState("_PageID") = (New Random()).Next().ToString()
End If
Al guardar algo a su estado de sesión, incluyen la PageID:
Session(ViewState("_PageID").ToString() & "CheckBoxes") = D
Notas:
- Como con las ID de sesión en general, no puede confiar en que los espectadores malintencionados no cambien el ID de sesión/ID de página. Esta es solo una solución válida para un entorno donde se puede confiar en todos los usuarios. Afortunadamente, ViewState ofrece más protección que el uso de un campo de entrada oculto.
- No tendrá acceso a PageID hasta que se restablezca ViewState en PostBack. Por lo tanto, no tendrá acceso a PageID en el controlador page_init().
Para desarrolladores que utilizan formularios web ASP.NET, puede obtener un grado de protección de usuarios malintencionados que alteran el ID de página utilizando ViewState en lugar de un campo oculto HTML nativo. De forma predeterminada, ViewState es hash con la clave del equipo del servidor y ASP.NET arroja una excepción si los datos publicados no son un hash válido. Si la ID de sesión se manipula, esto normalmente provocaría que se creara una nueva sesión cuando se escriban los siguientes datos, ya que la sesión existente no sería válida: los intentos de recuperar datos existentes darían como resultado excepciones de referencia nula. Podría verificar esto o la propiedad IsNewSession. – pwdst
@pwdst ¡Excelente punto, ajustaré la solución para que coincida! Gracias –
Esta es una excelente solución a una pregunta con la que tuve que lidiar esta semana para la integridad de datos en el trabajo. Los usuarios estaban abriendo las segundas pestañas y luego volviendo a actualizar el registro que se guardaba en la primera pestaña, con los datos de la sesión del curso asociados con el segundo registro. Utilicé una variante de esta solución para evitar actualizaciones incorrectas en el registro incorrecto. – pwdst