2016-08-29 1 views
1

Ich habe versucht, eine Lösung dafür den ganzen Tag zu finden, aber kein Glück.Django und Internet Explorer Sitzung Verlust

Ich habe eine Django 1.9.4 Website, die für alle gängigen Browser außer IE funktioniert.

Ich verwende Eclipse, um die Django-Site lokal zum Testen auszuführen.

Wenn ich mich mit dem IE-11 auf dem lokalen Server in meiner Website anmelden, funktioniert es gut.

Wenn ich die Website auf eine Produktionseinheit (andere IP-Adresse, über ein Netzwerk) ziehen, IE scheint die Sitzung zu verlieren, und ich bin nur in einer Endlosschleife auf der Anmeldeseite.

Im Folgenden sind die zwei Funktionen, die ich glaube, in Zusammenhang mit diesem Problem stehen. „return Umleitung (“ myapp: Homepage „)“ geht auf eine Ansicht, die mit „@checkLogin“

applylogin und wann wird ausgeführt eingerichtet wird, um das Netzwerk mit IE Entwickler-Tool unter Cookies Überwachung Ich sehe folgende

Richtung Schlüssel Wert Verfällt Domain-Pfad Secure HTTP nur

Received sessionid pk5svspepe9xk3og6ctnrwqrc56ukgrh Mo 29-Aug-2016 15.39.03 GMT/Nein Ja

so scheint es, eine Session-ID erhalten zu haben.

@requires_csrf_token 
def applylogin(request): 
newUsername = "" 
password = "" 
err_username = False 
err_pass=False 
if(request.POST.has_key('username')): 
    newUsername=request.POST['username'] 
if(request.POST.has_key('password')): 
    password=request.POST['password'] 
try: 
    user = User.objects.get(username=newUsername) 
    if(user.check_password(password)): 
     request.session['login'] = newUsername 
     request.session['userid'] = user.id 
     request.session['useraccess'] = user.access 
     if user.access >= 255: 
      request.session['admin'] = True 
     else: 
      request.session['admin'] = False 
     return redirect("myapp:homepage") 
    else: 
     err_pass=True 
except User.DoesNotExist as e: 
    err_username=True 
    logger.exception(e) 
except Exception as e: 
    logger.exception(e) 
build = getBuildType() 
return render(request, "Redacted") 


def checkLogin(fn): 
def wrapped(request, *param, **dparam): 
    str_redirect = "" 
    str_loc = dparam.get('location', "xxxx") 
    if(str_loc == "xxxx"): 
     str_redirect = "xxxx:landingpage" 
    else: 
     str_redirect = str_loc+":login" 

    loginname = request.session.get("login", "") 
    try: 
     if loginname == "": 
      return redirect(str_redirect) 
     User.objects.get(username=loginname) 
    except User.DoesNotExist: 
     return redirect(str_redirect) 
    return fn(request, *param, **dparam) 
return wrapped 

Auch ich bin nicht sicher, ob dies etwas mit dem Thema zu tun hat, aber ich habe diese Nachricht in meiner Protokolldatei nur dann, wenn die Website mit IE Zugriff

> Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/sync.py", line 66, in run_for_one 
    self.accept(listener) 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/sync.py", line 27, in accept 
    client, addr = listener.accept() 
    File "/usr/lib/python2.7/socket.py", line 202, in accept 
    sock, addr = self._sock.accept() 
error: [Errno 11] Resource temporarily unavailable 

ich ratlos rechts am jetzt. Ich weiß nicht, ob es ein Django-Problem oder ein reines IE-Problem ist.

p.s. Ich habe das p3p-Zeug ausprobiert, aber das schien nicht zu funktionieren.

Antwort

0

Das Problem liegt in der Zeitzonendifferenz und dem Cookie-Ablauf.

Um es zu testen, legte ich die SESSION_COOKIE_AGE = 37200 (2 Stunden + 30000 Sekunden) und IE geladen die Website einfach in Ordnung.

Interessant, dass Chrom und Firefox haben kein Problem damit.