Pregunta

Necesito recuperar un registro de una base de datos, mostrarlo en una página web (estoy usando ASP.NET) pero almacenar la ID (clave principal) de ese registro en algún lugar para poder volver a la base de datos más tarde con esa ID ( tal vez para hacer una actualización).

Sé que probablemente hay algunas formas de hacer esto, como almacenar el ID en ViewState o en un campo oculto, pero ¿cuál es el mejor método y cuáles son las razones por las que podría elegir este método sobre cualquier otro?

¿Fue útil?

Solución

Eso depende.

¿Te importa si alguien ve la identificación del registro?Si lo hace, tanto los campos ocultos como el estado de visualización no son adecuados;debe almacenarlo en el estado de sesión o cifrar el estado de vista.

¿Le importa si alguien envía el formulario con una identificación falsa?Si lo hace, no podrá utilizar un campo oculto (y deberá considerar la protección CSRF como beneficio adicional)

¿Quieres que no se pueda modificar pero no te importa que esté abierto para ser visto (con algo de trabajo)?Utilice viewstate y configure enableViewStateMac="true" en su página (o globalmente)

¿Lo quiere oculto y protegido pero no puede usar el estado de sesión?Cifre su estado de visualización configurando las siguientes entradas web.config

<pages enableViewState="true" enableViewStateMac="true" />
<machineKey ... validation="3DES" />

Otros consejos

¿Quiere que el usuario final conozca el ID?Por ejemplo, si el valor de identificación es una semilla estándar 1,1 de la base de datos, podría mirar el número y ver cuántos clientes tiene.Si cifra el valor (como puede hacerlo el estado de vista), me resultaría mucho más difícil descifrar la clave (pero no imposible).

La alternativa es almacenarla en la sesión, esto afectará el rendimiento (muy pequeño si es solo un número entero) de su aplicación, pero significa que yo, como usuario, nunca veré esa clave principal.También expone el objeto a otras partes de su aplicación, a las que puede querer o no que esté expuesto (los objetos de la sesión permanecen hasta que se borran, pasa un tiempo determinado (como 5 minutos) o se cierra la ventana del navegador, lo que suceda antes .

Los valores de estado de vista causan una carga adicional en el cliente después de cada publicación, porque el estado de vista no solo guarda objetos para la página, sino que también recuerda los objetos si usa el botón Atrás.Eso significa que después de cada publicación, el estado de visualización se vuelve un poco más grande y más difícil de usar.Sólo existirán en la página hasta que el navegador vaya a otra página.

Cada vez que almaceno una ID en una página como esta, siempre creo una propiedad

public int CustomerID {
    get { return ViewState("CustomerID"); }
    set { ViewState("CustomerID") = value; }
}

o

    Public Property CustomerID() As Integer
        Get
            Return ViewState("CustomerID")
        End Get
        Set(ByVal value As Integer)
            ViewState("CustomerID") = value
        End Set
    End Property

De esa manera, si decide cambiarlo de Viewstate a una variable de sesión o un campo de formulario oculto, solo es cuestión de cambiarlo en la referencia de propiedad, el resto de la página puede acceder a la variable usando "Page.CustomerID".

ViewState es una opción.Sólo es válido para la página en la que te encuentras.No transfiere solicitudes a otros recursos como el objeto Sesión.

Los campos ocultos también funcionan, pero estás filtrando poca información sobre tu aplicación a cualquier persona lo suficientemente inteligente como para ver la fuente de tu página.

También podría almacenar todo su registro en ViewState y tal vez evitar otro viaje de ida y vuelta al servidor.

Personalmente, soy muy cauteloso a la hora de poner algo en la sesión.Demasiadas veces nuestros procesos de trabajo han tenido ciclos y perdimos nuestro estado de sesión.

Como describiste tu problema, lo pondría en un campo oculto o en el estado de visualización de la página.

Además, al determinar dónde colocar datos como este, siempre observe el alcance de los datos.¿Está limitado a una sola página o a toda la sesión?Si la respuesta para nosotros es "sesión", la colocamos en una cookie.(Descargo de responsabilidad:Escribimos aplicaciones de intranet donde sabemos que las cookies están habilitadas).

Si es una identificación simple, elegirá pasarla en la cadena de consulta, de esa manera no necesitará realizar devoluciones de datos y la página será más accesible para los usuarios y los motores de búsqueda.

Session["MyId"]=myval;

Sería un poco más seguro y esencialmente ofrece la misma mecánica que ponerlo en estado de visualización.

Tiendo a colocar cosas así en campos ocultos, solo hazlo un poco.

 <asp:label runat=server id=lblThingID visible=false />
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top