2016-08-29 37 views
1

我一直在試圖找到一個整天的修復,但沒有運氣。Django和Internet Explorer會話丟失

我有一個Django 1.9.4網站,適用於除IE以外的所有主流瀏覽器。

我使用eclipse在本地運行Django站點進行測試。

當我使用本地服務器上的IE-11登錄我的站點時,它工作得很好。

當我將站點拖到生產單元(不同的IP地址,通過網絡)時,IE似乎失去了會話,並且我只是在登錄頁面處於無限循環。

下面是我相信這個問題的兩個功能。 「返回重定向(」 MYAPP:主頁「)」去裝飾有「@checkLogin」

applylogin獲取運行下的cookies我看到監控與IE開發工具的網絡時,以下

視圖方向鍵值到期域路徑安全HTTP只

收到的SessionID pk5svspepe9xk3og6ctnrwqrc56ukgrh週一,8月29日-2016 15時39分03秒GMT /否是

所以它似乎已經接收到會話ID。

@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 

另外,我不能確定這是否有什麼關係的問題,但我在日誌文件中得到這個消息訪問與IE

我很茫然右側的網站
> 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 

只有當現在。 我不知道它是Django問題還是純粹的IE問題。

p.s.我已經嘗試了p3p的東西,但似乎沒有工作。

回答

0

問題在於時區差異和cookie到期。

爲了測試它,我設置了SESSION_COOKIE_AGE = 37200(2小時+ 30000秒),並且IE加載了該站點。

有趣的是,鉻和火狐沒有這個問題。