Debido a los cambios que llegaron a Chrome durante julio, necesito modificar mi aplicación para proporcionar explícitamente el valor clave SameSite=None. Esto se debe a que el RFC trata la ausencia de esta configuración de una manera más impactante que si estuviera presente pero establecida en Ninguno.
Sin embargo, en el método set_cookie, el parámetro samesite está predeterminado en Ninguno, lo que hace que no se escriba en set-cookie. ¿Cómo puedo forzar esto en la parte set-cookie de la respuesta?
Cuando trato de configurar el mismo sitio = Ninguno con el siguiente código
resp.set_cookie('abcid', 'Hello', domain=request_data.domain, path='/', samesite=None, max_age=63072000)Esto no muestra ningún detalle de SameSite en la cookie de conjunto devuelta
abcid=Hola; Dominio=.localhost; Vence = martes, 29 de junio de 2021 22:34:02 GMT; Max-Edad=63072000; Ruta=/
Y si trato de establecer explícitamente el valor de Lax (que es uno de los valores aceptados por rfc) como tal
resp.set_cookie('abcid', "Hello", domain=request_data.domain, path='/', samesite="Lax", max_age=63072000)Obtengo la cookie establecida que tiene explícitamente la configuración SameSite=Lax
abcid=Hola; Dominio=.localhost; Vence = martes, 29 de junio de 2021 23:03:10 GMT; Max-Edad=63072000; Ruta=/; MismoSitio=Laxo
Probé Ninguno, "Ninguno" y "", pero estos bloquean la aplicación u omiten el mismo sitio en la respuesta resultante.
Cualquier ayuda sera recibida con agradecimiento
Una vez que se publique la solución a este problema , podrá usar set_cookie() de esta manera:
from flask import Flask, make_response app = Flask(__name__) @app.route('/') def hello_world(): resp = make_response('Hello, World!'); resp.set_cookie('same-site-cookie', 'foo', samesite='Lax'); resp.set_cookie('cross-site-cookie', 'bar', samesite='Lax', secure=True); return respMientras espera el lanzamiento, aún puede configurar el encabezado explícitamente:
from flask import Flask, make_response app = Flask(__name__) @app.route('/') def hello_world(): resp = make_response('Hello, World!'); resp.set_cookie('same-site-cookie', 'foo', samesite='Lax'); # Ensure you use "add" to not overwrite existing cookie headers resp.headers.add('Set-Cookie','cross-site-cookie=bar; SameSite=None; Secure') return respTambién puede usar el siguiente código para establecer cookies con SameSite=None hasta que se publique la solución
from werkzeug.http import dump_cookie # That's a workaround for explicitly setting SameSite to None # Until the following fix is released: # https://github.com/pallets/werkzeug/issues/1549 def set_cookie(response, *args, **kwargs): cookie = dump_cookie(*args, **kwargs) if 'samesite' in kwargs and kwargs['samesite'] is None: cookie = "{}; {}".format(cookie, b'SameSite=None'.decode('latin1')) response.headers.add( 'Set-Cookie', cookie )