Vì vậy, dựa trên thông tin ở đây Safari 3rd party cookie iframe trick no longer working? và đây Missing cookies on iframe in safari 5.1.5 rõ ràng là thủ đoạn cũ wont làm việc:Django khung nội tuyến Safari Fix
from django.http import HttpResponse
from django.conf import settings
SESSION_COOKIE_NAME = getattr(settings, 'SESSION_COOKIE_NAME')
class SafariIFrameFixMiddleware(object):
"""
Middleware fixes sessions with Safari browser in iframes
Safari default security policy restricts
cookie setting in first request in iframe
Solution is to create hidden form to preserve GET variables
and REPOST it to current URL
"""
def process_request(self, request):
if request.META['HTTP_USER_AGENT'].find('Safari') != -1 \
and request.META['HTTP_USER_AGENT'].find('Chrome') == -1 \
and SESSION_COOKIE_NAME not in request.COOKIES \
and 'cookie_fix' not in request.GET:
html = """<html><body><form name='cookie_fix' method='GET' action='.'>"""
for item in request.GET:
html += "<input type='hidden' value='%s' name='%s' />" % (request.GET[item], item)
html += "<input type='hidden' name='cookie_fix' value='1' />"
html += "</form>"
html += '''<script type="text/javascript">document.cookie_fix.submit()</script></html>'''
return HttpResponse(html)
else:
return
Vì vậy, tôi đang tìm kiếm cách thức mới để giải quyết nó.
Dường như nó yêu cầu mở cửa sổ (với sự cho phép của người dùng/lần nhấp hoặc nó sẽ bị safari chặn) và bắt đầu phiên ở đó.
Vấn đề là trang popup rất giống nhau sẽ chạy đúng tất cả các phần tử trung gian, do đó không phải lúc nào cũng có thể tồn tại bên trong dự án (muốn sửa lỗi ít nhất có thể).
Ngoài ra phiên django cũng bắt đầu bên trong phần mềm trung gian, tôi chưa tìm thấy cách bắt đầu nào một cách thủ công. Bất kỳ đề xuất?
Tại sao bạn cần bắt đầu một phiên bằng tay? Nếu cửa sổ bật lên của bạn xuất phát từ Django và chuyển qua phần mềm trung gian, bạn sẽ tự động nhận được phiên mới, nếu nó không tồn tại. – Anentropic
tại sao không sử dụng js và đăng thay thế trong khung nội tuyến? – Efazati