我正在使用 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/