Chrome=に到着する変更のため、SameSite = Noneキー値を明示的に提供するようにアプリを変更する必要があります。これは、RFCがこの設定の欠如をより影響のあるものとして扱っているためです存在する場合よりも方法はありますが、なしに設定されています。
ただし、set_cookieメソッドでは、samesiteパラメーターはデフォルトでNoneに設定されているため、set-cookieに書き込まれません。これを応答のcookie設定部分に強制するにはどうすればよいですか?
次のコードでsamesite = Noneを設定しようとすると
resp.set_cookie('abcid', 'Hello', domain=request_data.domain, path='/', samesite=None, max_age=63072000)
これは、返されたset-cookieにSameSiteの詳細を表示しません
abcid =こんにちは; Domain = .localhost; Expires = Tue、29-Jun-2021 22:34:02 GMT; Max-Age = 63072000;パス= /
そして、Laxの値(rfcごとに受け入れられる値の1つ)を明示的に設定しようとすると、
resp.set_cookie('abcid', "Hello", domain=request_data.domain, path='/', samesite="Lax", max_age=63072000)
SameSite = Lax設定が明示的に設定されているset-cookieを取得します
abcid =こんにちは; Domain = .localhost; Expires = Tue、29-Jun-2021 23:03:10 GMT; Max-Age = 63072000;パス= /; SameSite = Lax
なし、「なし」、「」を試してみましたが、これらはアプリケーションをクラッシュさせるか、結果の応答でSameSiteを省略します。
どんな助けでもありがたいです
この問題の修正 がリリースされると、次のように 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
リリースを待っている間も、明示的に ヘッダーを設定 できます。
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
修正がリリースされるまで、次のコードを使用してSameSite=None
でCookieを設定することもできます
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
)