django session 不在 iframe 中维护

标签 django iframe django-sessions

我正在使用 django 创建一个 session 聊天机器人。为了保持聊天机器人中的聊天流程,我正在使用 django session 。但是当我在 iframe 中使用聊天机器人的链接时,它不会存储任何 session 并且流程会中断。我想要一个功能,即使在 iframe 中也能帮助维护 session 。

对于 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>

用于维护 session 的代码
@staticmethod
    def extract_data(request, input_data):
        from chat import validations
        if 'city' not in request.session:
            response_data = {'extra': {}, 'data': {}}
            response_data['extra']['statement'] = 'Select Car Model which you like to rent?'
            response_data['extra']['type'] = 'carmodel'
            response_data['data'] = Cars.city_check(request,response_data, input_data)

        elif 'veh_name' not in request.session:

            response_data = Cars.veh_name_check(request, input_data)

        elif 'days' not in request.session:
            response_data = validations.days_check(request, input_data)

        elif 'phone' not in request.session:
            response_data = validations.phone_check(request, input_data)

        elif 'email' not in request.session:

            response_data = validations.mail_check(request, input_data)

        elif 'name' not in request.session:
            response_data = validations.name_check(request, input_data, 'Car')

        return response_data

最佳答案

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

Set-Cookie: session=your_session; SameSite=None; Secure 
来源:https://medium.com/trabe/cookies-and-iframes-f7cca58b3b9e
要使用 Django 执行此操作,您必须更新以下设置:
  • SESSION_COOKIE_SAMESITE
  • SESSION_COOKIE_SECURE

  • SESSION_COOKIE_SAMESITE = 'None'  # As a string
    SESSION_COOKIE_SECURE = True
    
    不幸的是,'None' SESSION_COOKIE_SAMESITE 的值仅从 Django 3.1 开始可用,并且有 no plan to backport it in 3.0 and 2.2 .
    另请注意,您的网站必须通过 HTTPS 提供服务。

    关于django session 不在 iframe 中维护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53627038/

    相关文章:

    python - "{%"在 HTML 中有什么作用?

    python - 菊花链式 Python/Django 自定义装饰器

    google-apps-script - 如何修复 HtmlService 的 "Error while parsing the ' 沙箱“属性”标志错误?

    php - 在 iframe html 标签中使用 php

    html - 如何在iframe中添加滚动条

    django - 使用 Django session 存储登录用户

    django-sessions - 在 Django 中,如何找到当前登录用户的所有其他事件 session ?

    authentication - 使用 Django session 从不同域进行身份验证的问题

    python - 从上传的文件创建 OleFile 类型的文件

    django - 在 Django 中用于 Comet 的库是什么?