Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

729
Views
Sesión de Python SAMESITE=Ninguna no configurada

Tengo problemas con Chrome y SameSite. Estoy sirviendo una página web en un iframe de Shopify y cuando configuro la sesión usando el inicio de sesión de matraz, Chrome me dice esto:

Se configuró una cookie asociada con un recurso de sitios cruzados en la URL sin el atributo SameSite . Ha sido bloqueado, ya que Chrome ahora solo entrega cookies con solicitudes entre sitios si están configuradas con SameSite=None y Secure .

Secure está configurado, pero traté de configurar SameSite de todas las formas posibles, pero sin efecto.

intenté configurar

app.config['SESSION_COOKIE_SAMESITE'] = "Ninguno"

Lo intenté, cambiando el comportamiento de la biblioteca, me cansé de configurar el atributo en set_cookie() pero nada parecía funcionar. La respuesta que veo no tiene el atributo SameSite.

(Tengo las últimas versiones de Flass, Flass-Login, Flass-Security y Werkzeug)

¿Me puedes ayudar?

Gracias

over 4 years ago · Santiago Trujillo
4 answers
Answer question

0

Solo para ampliar esto, usando la configuración de la aplicación de matraz tal como lo mencionó, puede configurar todo excepto cuando configura SESSION_COOKIE_SAMESITE=None . Google Chrome no parece colocar el valor como "Ninguno", que luego está predeterminado en "Laxo".

La forma en que solucioné este problema fue volver a agregar la cookie en el encabezado de respuesta. Primero tuve que obtener el valor de la cookie porque el uso de request.cookies.get("my_cookie") no parece extraer el valor de la cookie de la respuesta y siempre aparece como Ninguno.

en segundo lugar, el uso de response.set_cookie() todavía no establece el valor samesite=None . No tengo idea de por qué porque estoy usando la última versión de flask y Werkzeug que aparentemente debería solucionar el problema pero no lo hace. Después de muchas pruebas, descubrí que usar response.headers.add() funciona para agregar un encabezado Set-Cookie: pero necesitaba una forma de extraer el valor de la cookie para asegurarme de que puedo obtener la misma sesión. Después de revisar los documentos del matraz y otros foros en línea. Descubrí que en realidad puedo llamar a la clase SecureCookieSessionInterface y obtener la sesión firmada desde allí.

 from flask import session from flask.sessions import SecureCookieSessionInterface # where `app` is your Flask Application name. session_cookie = SecureCookieSessionInterface().get_signing_serializer(app)

Por último, tuve que asegurarme de que se agregara la misma sesión a la respuesta después de que se haya establecido la solicitud en lugar de llamarla en cada ruta que no parece factible dentro de una aplicación completa. Esto se hace usando el decorador after_request que se ejecuta automáticamente después de una solicitud.

 @app.after_request def cookies(response): same_cookie = session_cookie.dumps(dict(session)) response.headers.add("Set-Cookie", f"my_cookie={same_cookie}; Secure; HttpOnly; SameSite=None; Path=/;") return response

Lo que noté en Chrome es que básicamente establece una cookie duplicada con el mismo valor firmado. Dado que ambos son idénticos, uno tiene samesite=None en el encabezado de respuesta y el otro bloqueado por Chrome parece ignorarse. Así, la sesión se valida con la aplicación del matraz y se permite el acceso.

over 4 years ago · Santiago Trujillo Report

0

De: https://github.com/GoogleChromeLabs/samesite-examples/blob/master/python-flask.md

Suponiendo que está en la última versión de werkzeug que incluye la solución a este problema , debería poder 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='None', secure=True); return resp

De lo contrario, aún puede establecer 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 resp
over 4 years ago · Santiago Trujillo Report

0

Un error que se comete fácilmente (como lo hice yo) es confundir None con "None" . Asegúrese de usar la cadena en lugar del literal de python así:

 response.set_cookie("key", value, ..., samesite="None")

samesite=None sería ignorado y el valor predeterminado es "Lax".

over 4 years ago · Santiago Trujillo Report

0

Tuve un problema similar en el que seguía configurando SESSION_COOKIE_SAMESITE en Lax. En mi caso, fue causado por el matraz-talismán, que estaba sobrescribiendo mi configuración. especificando

 session_cookie_samesite=app.config["SESSION_COOKIE_SAMESITE"]

en el constructor Talismán trabajado.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!