2016-08-29 38 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加载了该站点。

有趣的是,铬和火狐没有这个问题。