Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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
django会话不在iframe中维护_Django_Iframe_Django Sessions - Fatal编程技术网

django会话不在iframe中维护

django会话不在iframe中维护,django,iframe,django-sessions,Django,Iframe,Django Sessions,我正在使用django创建一个对话聊天机器人。为了维护聊天机器人中的聊天流,我使用了django会话。但是当我在iframe中使用chatbot的链接时,它不会存储任何会话,并且流会中断。我想要一个功能,将有助于维护会话,即使在iframe 对于Iframe <html> <head></head> <body> <embed style=" width: 384px; height: 525px; margin-right: 0px !im

我正在使用django创建一个对话聊天机器人。为了维护聊天机器人中的聊天流,我使用了django会话。但是当我在iframe中使用chatbot的链接时,它不会存储任何会话,并且流会中断。我想要一个功能,将有助于维护会话,即使在iframe

对于Iframe

<html>
<head></head>
<body>
<embed style=" width: 384px; height: 525px; margin-right: 0px !important; bottom: 0px; float: right; position: absolute; bottom: 30px; width: 100%;" frameborder="0" scrolling="no" id="iframe" src="http://*********.com/********/*******.html">


</body>
</html>

这与django没有什么关系。浏览器目前偏执于让框架/嵌入访问cookie,即使它们是cookie的源。此外,许多用户阻止第三方cookie(通常包括框架cookie)或所有cookie。您可以在框架源中嵌入会话id,例如,在包含可能访问cookie的框架的页面上,使用django模板或客户端javascript生成的会话id(完全随机或从cookie生成)

您可能还希望完全放弃嵌入/帧而使用django include块,该块将聊天内容窗口作为div或类似文件插入包含页面,从而提供对cookie或其他会话变量的更多访问。在本例中,我将javascript与html分开,并将js脚本标记放在头部

最后,您可以将对cookie的依赖性替换为客户端的公共ip和用户代理的组合,以及可能包含页面的URI(对于模板)

编辑关于安全性:(在@EthanKeller发表评论后)


浏览器试图保护框架不受主要内容的影响,反之亦然。这完全取决于是否包含任何敏感信息。如果是这样的话,我建议将框架放在它自己的窗口/选项卡中,可能通过弹出调用来分离它们。然而,在聊天机器人的例子中,我怀疑有任何事情是如此敏感。经销商的选择。

要允许来自iframe的cookie,您必须使用
SameSite=None
Secure
选项设置cookie

Set-Cookie: session=your_session; SameSite=None; Secure 
资料来源:

要使用Django执行此操作,您必须更新以下设置:

SESSION_COOKIE_SAMESITE='None'#作为字符串
会话\u COOKIE\u SECURE=True
不幸的是,
SESSION\u COOKIE\u SAMESITE
'None'
值仅在Django 3.1之后可用,并且存在


另外请注意,您的网站必须通过HTTPS提供服务。

您好,是否有人解决了此问题?我认为这是因为对第三方cookie的限制?能否显示设置这些会话变量的代码。Thanksit与跨域cookies有关。启用浏览器的第三方cookie并再次尝试web应用程序—所有这些选项都会暴露其他安全漏洞。我知道第三方cookie预防(见我之前的评论)。谢谢你的建议-我认为最好的答案是“不要这样做!”@我同意这是一个潜在的安全问题。相框之类的东西总是很有趣。请参见编辑以获取备选方案。
Set-Cookie: session=your_session; SameSite=None; Secure