微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Flask-Session cookie 适用于其他浏览器的 ip 地址和域,但对于 chrome 它仅适用于 ip 地址

如何解决Flask-Session cookie 适用于其他浏览器的 ip 地址和域,但对于 chrome 它仅适用于 ip 地址

我发现了一个有同样问题的问题,只不过它已经有 7 年的历史了,他们遇到了相反的问题,chrome 为他们的域工作,而不是 IP。我需要这个应用程序在域上工作,而不是在 ip 上工作,这是不幸的。 如果我有一些这样的基本代码: 烧瓶:

app = Flask(__name__)
from dotenv import load_dotenv
load_dotenv()
SECRET_KEY = os.getenv('FLASK_APP_SECRET_KEY')
SESSION_TYPE = 'filesystem'
app.config.from_object(__name__)
Session(app)
CORS(app)

@app.route('/give',methods = ['GET'])
@cross_origin(supports_credentials=True)
def user_make(id):
    session['Hi'] = 'There'
    return 'ye'

@app.route('/take',methods = ['GET'])
@cross_origin(supports_credentials=True)
def user_load(id):
    return session['Hi']


反应:

let data = new FormData()
return axios
      .get('12.34.56.78' + '/give',data,{
        headers: {
          "Content-Type": "multipart/form-data",},}).then(
return axios
      .take('12.34.56.78' + '/take',}))
      

在具有 ip='12.34.56.78' 和域 'example.com' 的服务器上: 在safari上使用域或ip时,输出

'那里'

两者都

然而,在 chrome 上, 对于 ip,输出

'那里'

然而,对于域,输出

错误

编辑: 更多信息: 这是在 AWS ec2 ubuntu 服务器上运行的,该服务器在前端的端口 80 和后端的端口 5000 上运行。我使用 AWS Route 53 将 IP 地址连接到域名...以防万一。访问前端可以到ip或者域名,而访问后端必须到ip:5000

需要更多信息吗?

这能解决吗? 谢谢!

解决方法

我认为问题在于谷歌浏览器如何管理 cookie。这是“SameSite”属性。早在 2020 年 7 月 14 日,Google 就开始逐步推出新的浏览器政策,并进行了一些重大更改。如果未指定 SameSite 属性,则默认情况下将 cookie 视为 SameSite=Lax。另一个弃用并删除了带有 SameSite=None 属性的 cookie 的使用,该属性不包括 Secure 属性。这意味着任何请求 SameSite=None 但未标记为安全的 cookie 现在都将被拒绝。这意味着前端无法联系后端,站点无法运行。要修复它,您只需要确保在创建 _SESSION_ID cookie 时,它​​包含 SameSite=None保护属性。

P.S.1:基于 articleCaleb。后端是Ruby on Rails,但我认为这不是问题。 P.S.2:在更改任何内容之前,请尝试其他基于 chrome 的浏览器,例如 VivaldiComodo 甚至新的 Microsoft Edge

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。