Django Iframe Safari Fix

Итак, на основе информации здесь Safari 3rd party cookie iframe trick больше не работает? и здесь Отсутствует куки на iframe в сафари 5.1.5 ясно, что старые трюки не работают:

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

Итак, я ищу новый способ решить эту проблему.

Кажется, что для этого требуется открыть окно (с правами пользователя/кликом или блокируется сафари) и начать там сеанс.

Проблема заключается в том, что на той же самой всплывающей странице будут выполняться все средние страницы, поэтому она не может быть всегда жизнеспособной внутри проекта (как можно меньше интрузивного исправления).

Также начало сеанса django также находится в промежуточном программном обеспечении, но я не нашел чистого способа запуска одного из них вручную. Любые предложения?

Ответ 1

Я создал рабочую версию исправления и загрузил ее в pypi здесь: http://pypi.python.org/pypi/django-iframetoolbox

Примечание. Он может быть нестабильным до версии 0.2

Ответ 2

Я тоже создал работу, похожую на JackLeo. Вы можете использовать промежуточное программное обеспечение или декоратор https://github.com/philroche/django-httpsiframecookiesetter, а также несколько дополнительных параметров.