【发布时间】: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