11

ここでの情報に基づいて、SafariサードパーティのCookie iframeトリックは機能しなくなりましたか?そして、ここでサファリ5.1.5のiframeにCookieがないのは、古いトリックが機能しないことは明らかです。

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セッションの開始はミドルウェア内にもあります。手動で開始するクリーンな方法は見つかりませんでした。助言がありますか?

4

2 に答える 2

4

修正の動作バージョンを作成し、ここでpypiにアップロードしました:http://pypi.python.org/pypi/django-iframetoolbox

注:0.2バージョンまで安定しない可能性があります

于 2012-08-27T07:28:22.720 に答える
1

私もJackLeoと同様の回避策を作成しました。ミドルウェアまたはデコレータhttps://github.com/philroche/django-httpsiframecookiesetter、およびその他のいくつかのオプションを使用できます。

于 2013-10-15T10:20:20.403 に答える