Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django iframe:每个请求都创建sessionkey_Python_Django_Shopify_Shopify App - Fatal编程技术网

Python Django iframe:每个请求都创建sessionkey

Python Django iframe:每个请求都创建sessionkey,python,django,shopify,shopify-app,Python,Django,Shopify,Shopify App,我有一个在Django中构建的shopify应用程序,直到最近都运行良好。会话不会在每个请求中持久化,因此会引发异常,因为在上一个请求中设置的给定密钥的会话不存在。 在Shopify之外尝试应用程序终结点效果很好,会话在请求之间保持完美,因此这肯定是Shopify内部的一个问题 查看数据库中的sessions表,我们看到多个SessionKey具有相同的数据,这表示每个请求正在创建另一个会话。如何在iframe中跨请求持久化会话?目前使用的Django版本是2.1,它现在包含了一个新功能,有助于

我有一个在Django中构建的shopify应用程序,直到最近都运行良好。会话不会在每个请求中持久化,因此会引发异常,因为在上一个请求中设置的给定密钥的会话不存在。 在Shopify之外尝试应用程序终结点效果很好,会话在请求之间保持完美,因此这肯定是Shopify内部的一个问题


查看数据库中的sessions表,我们看到多个SessionKey具有相同的数据,这表示每个请求正在创建另一个会话。如何在iframe中跨请求持久化会话?

目前使用的Django版本是2.1,它现在包含了一个新功能,有助于防止CSRF攻击。根据新的SESSION\u COOKIE\u SAMESITE默认值为'Lax',这是'Strict'和None之间的中间地带


这项功能显然适用于独立的Django应用程序,但在类似Shopify的iframe中会导致它们崩溃。在settings.py中设置SESSION\u COOKIE\u SAMESITE=None解决了问题。

您的方法不再有效。谷歌将很快禁止第三方cookie,而firefox和Safari已经禁止了。由于第三方cookie很快就无法工作,因此需要实施新的应用程序

提交用于应用程序审查的新应用程序将在Chrome incognito选项卡下进行测试,默认情况下,该选项卡不允许使用第三方cookie。即使添加“Samesite”,会话id也不会通过cookie。当无法通过时,浏览器将再次重试,以便您看到创建的多个会话。起初,我认为这是服务器端错误,因为它看起来像日志中的无限循环

默认情况下,Django在调用视图中的request.session函数时创建一个存储sessionid的cookie。此cookie仅在使用request.session时创建。如果不使用request.session,应用程序可以顺利加载。但根本不使用会话几乎是不可能的。甚至示例shopify django应用程序也在使用会话

我认为可能的方法是更改会话中间件。通过,我知道我们可以使用有效负载中的shop(dest)和user(sub)字段创建唯一id,并基于该id存储会话数据。只需自定义、删除request.cookies并将此id用作会话密钥。应该没问题

就我个人而言,我没有改变这个中间件,因为工作量太大了。在完成会话令牌身份验证之后,我发现在测试人员执行应用程序审查期间,会话不能持久。如果可以实现会话令牌身份验证并更新默认的django会话,则可以持久化会话数据


在我看来,对于Python/Django开发人员来说,独立应用程序可能是更好的选择。如果有人有更简单的方法,请告诉我。我非常想在没有任何具体例子的情况下研究所有这些问题。

您能添加与会话相关的设置吗?