Necesito que los atributos se envíen pasivamente a todas las llamadas a mi servidor back-end, API y recursos (sin código para enviar explícitamente esa información a la API a través del encabezado, el cuerpo de la solicitud, etc.)
Estos atributos solo son útiles para la pestaña/sesión actual y no es deseable que el valor persista después de que se haya cerrado la pestaña. Si hay varias pestañas abiertas, es importante que cada pestaña tenga sus propios valores.
Esencialmente sessionStorage: el problema con sessionStorage es que no se envía a la API en cada solicitud.
Establecer un valor como una cookie funciona, pero el valor persiste después de que finaliza la sesión de la pestaña/ventana y la cookie se comparte entre pestañas/ventanas.
¿Puede establecer un valor en una cookie que imite el comportamiento de sessionStorage?
Creo que el enfoque más sencillo sería crear un contenedor para la API que agregue los valores deseados a la solicitud (de la forma que sea necesaria). Por ejemplo:
// Mutate the below object to send data to the server const valuesToSend = {}; const makeRequest = (url) => fetch(url, { body: JSON.stringify(valuesToSend }); valuesToSend.foo = 'foo'; fetch('someurl') .then(res => res.json()) .then((result) => { // ... })
Si realmente quisiera almacenar los valores en cookies, sería posible, pero no ayudaría mucho, ya que las cookies se comparten y tendría que filtrar solo las cookies que coincidan con la pestaña actual, por ejemplo, podría generar una identificación única en la carga de la página y, al configurar una cookie, anteponga la clave de la cookie con la identificación. Luego, al realizar una solicitud, filtre solo los valores que coincidan con la ID y envíe solo esos.
Posible, pero engorroso. Una función de contenedor es mucho más fácil.
Si esa no es una opción, otra posibilidad es usar el mismo tipo de enfoque que el anterior, excepto que también configura una cookie con la ID única justo antes de realizar una solicitud, y luego verifica eso en el servidor para averiguar qué valores son relevante para la solicitud actual. Eso es:
Siempre que configure la identificación de la pestaña en una cookie antes de realizar una solicitud, el servidor debería poder identificar qué cookies son relevantes para una solicitud determinada.
Esto es complicado. Recomiendo averiguar si hay una mejor manera de estructurar la aplicación para que esto no sea necesario.
Si algo así existe, podemos despedirnos de los ataques CSRF.
Puede encontrar útiles las cookies específicas de esta pestaña sin usar sessionStorage o cualquier característica de HTML5