2 回答
TA贡献1817条经验 获得超6个赞
使用的 Django 版本是 2.1,它现在包含一个新功能,有助于防止 CSRF 攻击。根据文档,新的 SESSION_COOKIE_SAMESITE 默认值为“Lax”,这是“Strict”和“None”之间的中间地带。
此功能显然适用于独立的 Django 应用程序,但会导致它们在类似于 Shopify 的 iframe 中中断。在 settings.py 中设置 SESSION_COOKIE_SAMESITE = None 解决了这个问题。
TA贡献1863条经验 获得超2个赞
你的方法不再奏效。谷歌将很快禁止 3rd 方 cookie,而 Firefox 和 Safari 已经这样做了。新的应用程序需要实现会话令牌身份验证,因为第三方 cookie 不会很快起作用。
提交应用审查的新应用将在 Chrome 隐身标签下进行测试,默认情况下不允许第三方 cookie。即使您添加了“Samesite”,会话 ID 也不会通过 cookie 传递。当它无法通过时,浏览器将再次重试,因此您会看到创建了多个会话。起初,我认为这是服务器端错误,因为它看起来像日志中的无限循环。
当您在视图函数中调用 request.session 时,Django 默认会创建一个 cookie 存储 sessionid。此 cookie 仅在您使用 request.session 时创建。如果您不使用 request.session,应用程序可以毫无问题地加载。但是完全不使用 session 几乎是不可能的。甚至示例 shopify django 应用程序也在使用会话。
我认为可能的方法是更改会话中间件。通过Shopify 开发人员的回复,我知道我们可以使用负载中的 shop (dest) 和 user (sub) 字段来创建唯一的 ID 并根据该 ID 存储您的会话数据。只需自定义默认会话中间件,删除 request.cookies 并使用此 ID 作为会话密钥。应该没问题。
就我个人而言,由于工作量太大,我没有更改这个中间件。完成会话令牌身份验证后,我发现在测试人员进行应用程序审查期间会话无法持续。如果您可以实现App Bridge、会话令牌身份验证并更新默认的 django 会话,您就可以持久化会话数据。
IMO,独立应用程序可能是 Python / Django 开发人员的更好选择。如果有人有更简单的方法,请告诉我。我很想在没有任何具体例子的情况下研究所有这些。
添加回答
举报