Итак, основываясь на информации здесь Safari, сторонний трюк с файлами cookie iframe, больше не работает? и здесь Отсутствуют куки в 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 += ''''''
return HttpResponse(html)
else:
return
Поэтому я ищу новый способ решить эту проблему.
Кажется, что для этого требуется открыть окно (с разрешения пользователя/щелчка, иначе оно будет заблокировано сафари) и начать сеанс там.
Проблема в том, что одна и та же всплывающая страница будет работать со всеми промежуточными программами, поэтому она не всегда может быть жизнеспособна внутри проекта (нужно как можно меньше навязчивых исправлений).
Кроме того, запуск сеанса django также находится внутри промежуточного программного обеспечения, я не нашел никакого простого способа запустить его вручную. Есть предложения?