【问题标题】:django and internet explorer session lossdjango 和 Internet Explorer 会话丢失
【发布时间】:2016-08-30 09:51:50
【问题描述】:

我整天都在尝试解决这个问题,但没有成功。

我有一个 Django 1.9.4 网站,适用于除 IE 之外的所有主要浏览器。

我正在使用 eclipse 在本地运行 Django 站点进行测试。

当我在本地服务器上使用 IE-11 登录我的站点时,它运行良好。

当我将站点拉到生产单元(不同的 IP 地址,通过网络)时,IE 似乎失去了会话,我只是在登录页面上处于无限循环中。

以下是我认为与此问题相关的两个功能。 "return redirect("myapp:homepage")" 转到一个用 "@checkLogin" 装饰的视图

applylogin 运行,当使用 IE 开发工具在 cookie 下监控网络时,我看到以下内容

Direction Key Value Expires Domain Path Secure HTTP only

收到 sessionid pk5svspepe9xk3og6ctnrwqrc56ukgrh Mon, 29-Aug-2016 15:39:03 GMT / No Yes

所以它似乎收到了一个会话 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问题。

附言我已经尝试过 p3p 的东西,但似乎没有用。

【问题讨论】:

    标签: python django internet-explorer session gunicorn


    【解决方案1】:

    问题在于时区差异和 cookie 过期。

    为了测试它,我设置了 SESSION_COOKIE_AGE = 37200(2 小时 + 30000 秒)并且 IE 加载了网站就好了。

    有趣的是,chrome 和 firefox 对此没有问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 2023-04-04
      • 2012-08-17
      • 1970-01-01
      相关资源
      最近更新 更多