gpt4 book ai didi

Python session SAMESITE=None 未设置

转载 作者:行者123 更新时间:2023-12-03 16:20:46 25 4
gpt4 key购买 nike

我遇到了 chrome 和 SameSite 的问题。我在 shopify iframe 中提供网页,当使用 flask 登录设置 session 时,chrome 告诉我:

A cookie associated with a cross-site resource atURL was set without theSameSite attribute. It been blocked, as Chrome now only deliverscookies with cross-site requests if they are set with SameSite=Noneand Secure.


设置了安全,但我尝试以所有可能的方式设置 SameSite,但没有效果。
我试过设置

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


我试过了,改变了库的行为,我厌倦了在 set_cookie() 中设置属性,但似乎没有任何效果。我看到的响应没有 SameSite 属性。
(我有 flask 、 flask 登录、 flask 安全和 werkzeug 的最新版本)
你能帮助我吗?
谢谢

最佳答案

只是为了扩展这一点,正如您提到的那样,使用 flask 应用程序配置,您可以设置所有内容,除非设置 SESSION_COOKIE_SAMESITE=None谷歌浏览器似乎没有将该值设置为“无”,然后默认为“松懈”。
我解决此问题的方法是将 cookie 添加回响应 header 中。首先我必须获取 cookie 值,因为使用 request.cookies.get("my_cookie")似乎没有从响应中提取 cookie 值,并且始终显示为 None。
其次,使用 response.set_cookie()仍然没有设置 samesite=None值(value)。我不知道为什么,因为我使用的是最新版本的 flaskWerkzeug这显然应该解决问题,但事实并非如此。经过大量测试,我发现使用 response.headers.add()可以添加 Set-Cookie: header ,但我需要一种方法来提取 cookie 值以确保我可以获得相同的 session 。在浏览了 flask 文档和其他在线论坛之后。我发现我实际上可以调用SecureCookieSessionInterface上课并从那里获取签名的 session 。

from flask import session
from flask.sessions import SecureCookieSessionInterface

# where `app` is your Flask Application name.
session_cookie = SecureCookieSessionInterface().get_signing_serializer(app)
最后,我必须确保在建立请求后将相同的 session 添加到响应中,而不是在每条路由上调用它,这在完整的应用程序中似乎不可行。这是通过使用 after_request 来完成的。请求后自动运行的装饰器。
@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
我在 Chrome 中注意到的是,它基本上设置了一个具有相同签名值的重复 cookie。因为两者都与具有 samesite=None 的相同。在响应 header 中,其他被 Chrome 阻止的似乎被忽略了。因此,使用 flask 应用程序验证 session 并允许访问。

关于Python session SAMESITE=None 未设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62992831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com