2012-06-22 42 views
11

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?

+0

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

+0

tại sao không sử dụng js và đăng thay thế trong khung nội tuyến? – Efazati

Trả lời

Các vấn đề liên quan