¿Dónde debo guardar las ID de usuario en una aplicación web?

Si entiendo esto correctamente, está creando una aplicación web que se encuentra frente a una API, y la API maneja todos los servicios de back-end. En particular, no tiene una base de datos de su lado y, de hecho, no debería.

Entonces solo hay tres lugares donde puede almacenar esa información: la sesión, la URL o en una cookie en el cliente. Abogo por la solución de cookies, pero veamos cada una.

  • La sesión: Parece que la mayoría de los nuevos desarrolladores realmente no saben cómo funciona la sesión. Simplemente coloca cosas allí, y luego esas cosas aún están allí en solicitudes posteriores (cargas de página o llamadas AJAX). Pero no es magia. El marco generalmente asigna una cookie de sesión única a cada usuario. Y la cookie de sesión determina qué objeto de sesión se utiliza (uno para cada usuario activo, es decir, cada sesión). Esto normalmente se almacena en la memoria y, si se reinicia el servidor, la sesión desaparece. Si el servidor está equilibrado con otros servidores, la sesión desaparece. Sí, hay formas de evitar esto, pero todos se acercan al mantenimiento de una base de datos de sesión persistente. Y estamos evitando agregar una base de datos para esta información simple.
  • La URL: si cada URL que genera para el usuario incluye su user_id, entonces ha garantizado que siempre estará disponible para el servidor. Pero es una molestia recordar siempre hacer esto (o crear una capa adicional para garantizar que esto suceda). Y expone públicamente un detalle de implementación innecesariamente. http://example.com/my_profile debería funcionar sin? user_id = 100001.
  • Una cookie: esta es la solución más simple y estándar. Simplemente crea una cookie user_id. Las cookies son enviadas por el navegador con cada solicitud, al igual que la URL, pero el proceso es (en su mayoría) invisible para el usuario. Esta es tu mejor apuesta.

También existe la opción de almacenamiento local HTML5, pero eso no es realmente para este caso de uso.

Y si le preocupa exponer las ID de las bases de datos, no lo haga. Todos los demás lo hacen, y es una práctica estándar.

  • Si la identificación de usuario provenía de un sistema de autenticación y tiene que mostrar datos relacionados con el usuario autenticado, iría con la sesión.
  • Si la identificación de usuario es solo una consulta o un parámetro de filtro y no representa un estado permanente de la interfaz / interfaz / aplicación, lo pondría en la URL.
  • Sería muy prudente al almacenar user_id en la cookie, ya que cualquiera puede modificar el contenido de eso con una simple extensión de Firefox o con Chrome también. Puede provocar una fuga de datos y una posible falla de seguridad si lo usa como un token de autenticación.

Como dijo Graham, no tiene que preocuparse por exponer las ID de las bases de datos. No causará ningún problema. Las URL realmente elegantes hacen que su aplicación sea más amigable. Por ejemplo: http://api.example.com/some_cat/

Si desea evitar el escaneo completo de datos de su sistema al pasar por el rango de identificadores, puede usar un sufijo hash en él. Una forma de hacerlo:

>>> de hashlib import md5
>>> id = 123456
>>> m = md5 ()
>>> m.update (str (id))
>>> m.update (‘some_secret_string’)
>>> sufijo = m.hexdigest () [: 4]
>>> id_in_url = ‘% s-% s’% (id, sufijo)

Obtendrá URL como http://example.com/something?id=