chrome即使使用samesite = None也阻止了Cookie

时间:2020-09-04 19:31:39

标签: google-chrome flask cookies samesite

我在heroku中托管了一个flask应用程序,它作为iframe嵌入到我的网站之一。 假设a.com将此<heroku_url>.com渲染为iframe。 当用户访问a.com时,将呈现<heroku_url>.com并创建会话。

from flask import session, make_response

@app.route("/")
def index():
    session['foo'] = 'bar'
    response = make_response("setting cookie")
    response.headers.add('Set-Cookie', 'cross-site-cookie=bar; SameSite=None; Secure')
    return response

在Chrome开发工具中,我看到Cookie被阻止了。虽然在Firefox中工作正常。 我是否正确设置了Cookie? 我了解这是由于chrome80更新造成的,但不确定解决方法

2 个答案:

答案 0 :(得分:0)

您可以通过检查位于https://samesite-sandbox.glitch.me/的测试站点来检查您的浏览器是否按预期处理了cookie。

如果所有行都包含绿色对勾(✔️),则说明cookie可能存在某种问题,我建议检查DevTools中的“问题”选项卡和“网络”选项卡以确认android:requestLegacyExternalStorage="true"标头中确实包含应该是什么。

如果测试站点上有红色或橙色的十字(✘),则说明浏览器中的某些内容正在影响Cookie。检查您是否没有阻止第三方Cookie(<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.app.www.app"> <application android:name="io.flutter.app.FlutterApplication" android:label="finosellapp" android:requestLegacyExternalStorage="true" android:icon="@mipmap/ic_launcher"> <activity android:name=".MainActivity" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> <meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" /> <meta-data android:name="io.flutter.embedding.android.SplashScreenDrawable" android:resource="@drawable/launch_background" /> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <meta-data android:name="flutterEmbedding" android:value="2" /> </application> </manifest> )或运行可能执行类似操作的扩展程序。

答案 1 :(得分:0)

在会话cookie中将samesite属性设置为None似乎已经解决了问题。

必须更新werkzeug(烧瓶包装的WSGI Web应用程序库)并更新会话cookie。 即

app.config['SESSION_COOKIE_SAMESITE'] = 'None'
app.config['SESSION_COOKIE_SECURE'] = True

但是,这也取决于用户在“ chrome:// settings / cookies”中的偏好。

即使选择了以下选项之一,即使samesite设置为“无”,Chrome也会阻止会话Cookie

  • 阻止第三方Cookie
  • 阻止所有cookie
  • 以隐身模式阻止第三方Cookie(以隐身模式阻止)。