我使用django 1.7和python 2.73。我在Windows Server 2008上设置了django。
代码就像这样,没什么特别的,输入用户名并保存会话,然后跳转到另一个视图。
def login_user(request):
error = None
if request.POST:
form = LoginForm(request.POST)
username = request.POST.get('username')
password = request.POST.get('password')
try:
user = authenticate(username=username, password=password)
print user
except:
raise Http404("Authenticate faile")
if user is not None:
login(request, user)
try:
app_user = ApplicaitionUser.objects.using('xxx').filter(user_name=username).exclude(app_name='XXXX')
app_user_list = list(app_user.values('user_name', 'app_name'))
request.session['app_user_list'] = app_user_list
except ApplicaitionUser.DoesNotExist:
raise Http404("user does not exist")
user_info = UserInfo.objects.filter(user_name=username)
user_info_list = list(user_info.values('user_name', 'user_full_name', 'user_budget_centre', 'user_email'))
request.session['user_info_list'] = user_info_list
return HttpResponseRedirect('/index/')
else:
error = 'User name or password is wrong'
else:
user_info_list = request.session.get('user_info_list', None)
if user_info_list is not None:
return HttpResponseRedirect('/index/')
else:
form = LoginForm()
tmp = loader.get_template("auth.html")
cont = RequestContext(request, {'form': form, 'error': error})
return HttpResponse(tmp.render(cont))
def index(request):
try:
app_user_list = request.session.get('app_user_list', None)
user_info_list = request.session.get('user_info_list')
except:
raise Http404('Database is down')
else:
if user_info_list is not None:
user_name = user_info_list[0]['user_name']
else:
return HttpResponseRedirect("/")
===================================Rest of Code==========================
如果我使用IP地址(127.0.0.1:8000),一切正常。 (浏览器是Chrome和FireFox的最新版本。)
但是当我使用子域名(sub.domain.com)时,有些东西真的很奇怪。
在Chrome中,request.session['user_info_list']
成功存储了数据,我在数据库中检查了它,然后跳转到索引视图,user_info_list = request.session.get('user_info_list')
无法获取数据,然后返回login_user视图,但是{{1}在此视图中可以获取数据。然后再次跳转到索引视图,user_info_list = request.session.get('user_info_list')
获取数据。
在FireFox中,不同的是request.session['user_info_list']
无法在login_user视图中获取数据
它允许任何网址。
user_info_list = request.session.get('user_info_list')
网址来自ALLOWED_HOSTS = ['*']
跳转到sub.domain.com.au
我还尝试了sub.domain.com.au/index
或SESSION_COOKIE_DOMAIN = '.domain.com.au'
或SESSION_COOKIE_DOMAIN = 'sub.domain.com.au'
。它们都不起作用。
我会搜索Django authentication works on Chrome, but not on Firefox或Django session doesn't work in Firefox等类似问题,但不起作用。
我不太确定是代码问题还是互联网问题。因为如果我使用ip地址,所有工作正常。有什么想法吗?
由于
答案 0 :(得分:1)
您应该将此行添加到settings.py
SESSION_COOKIE_DOMAIN = ".yourdomain.com"
用于会话Cookie的域名。将其设置为如下的字符串 “.example.com”(注意领先的点!)用于跨域cookie,或 对标准域cookie使用None。
答案 1 :(得分:0)
问题是网络问题,我们正在使用Sophos,在他们将url更改为https之后,一切正常。