Skip to content

Instantly share code, notes, and snippets.

@JackLeo
Forked from krikulis/iframe_middleware.py
Created December 22, 2011 17:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JackLeo/1511039 to your computer and use it in GitHub Desktop.
Save JackLeo/1511039 to your computer and use it in GitHub Desktop.
Django IFrame session Safari FIX
from django.http import HttpRequest
# 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
class IFrameFixMiddleware(object):
""" middleware fixes sessions with Safari browser in iframes """
def process_request(request):
if request.META['HTTP_USER_AGENT'].find('Safari') != -1 and 'sessionid' 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[name], name)
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)
@sandeepks230
Copy link

I tried this method but got this error : TypeError: SafariIFrameFixMiddleware() takes no arguments

This is Middlewares =
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'csp.middleware.CSPMiddleware', 'shopify_app.middleware.LoginProtection', 'debug_toolbar.middleware.DebugToolbarMiddleware', 'shopify_app.iframe_middleware.SafariIFrameFixMiddleware' ]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment