如何在烧瓶响应中显式设置 samesite=None

Mar*_*use 17 python cookies flask samesite

由于 7 月份 Chrome 中的更改,我需要修改我的应用程序以明确提供 SameSite=None 键值。这是因为 RFC 以比存在但设置为 None 更具影响力的方式处理此设置的缺失。

然而,在 set_cookie 方法中,samesite 参数默认为 None,这导致它不会被写入 set-cookie。如何强制将其放入响应的 set-cookie 部分?

当我尝试使用以下代码设置 samesite=None 时

resp.set_cookie('abcid', 'Hello', domain=request_data.domain, path='/', samesite=None, max_age=63072000) 
Run Code Online (Sandbox Code Playgroud)

这不会在返回的 set-cookie 中显示任何 SameSite 详细信息

abcid=你好;域=.localhost; 到期日 = 2021 年 6 月 29 日星期二 22:34:02 GMT;最大年龄=63072000;路径=/

如果我尝试明确设置 Lax 的值(这是每个 rfc 接受的值之一)

resp.set_cookie('abcid', "Hello", domain=request_data.domain, path='/', samesite="Lax", max_age=63072000)
Run Code Online (Sandbox Code Playgroud)

我取回了明确具有 SameSite=Lax 设置的 set-cookie

abcid=你好;域=.localhost; 到期日 = 2021 年 6 月 29 日星期二 23:03:10 GMT;最大年龄=63072000;路径=/;SameSite = 松懈

我尝试过 None、"None" 和 "",但这些要么使应用程序崩溃,要么在结果响应中省略 SameSite。

任何帮助将不胜感激

row*_*n_m 10

一旦修复这个问题被释放,你将能够使用 set_cookie() 这样的:

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 resp
Run Code Online (Sandbox Code Playgroud)

在等待发布时,您仍然可以 显式设置标头

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
Run Code Online (Sandbox Code Playgroud)