【发布时间】:2011-08-12 03:04:35
【问题描述】:
我之前问过一个类似的问题,但我做了更多的研究,这次迭代应该有点不同。似乎有几个 SO 用户在单个视图中注册和登录用户时遇到了问题,并且还没有真正得到解答。
问题是我在单个 Django 视图中注册、验证和登录用户。对于大多数用户来说这很好,但对于其他用户,他们的后续请求(他们单击我网站上的链接)返回一个匿名用户。不知何故,登录的用户失去了他们的会话,并被重定向到我网站上不需要身份验证的页面。
当他们随后通过纯登录视图(而不是注册 + 登录视图)登录时,会话数据保持完整。这个问题似乎真的是在一个视图中注册和登录。
请参阅此帖子以了解相同的问题:https://stackoverflow.com/questions/1693726/problem-with-combined-authentication-login-view。
有人建议这可能是线程问题。我还看到它表明它与缓存会话数据的后端有关。
对它真正相关的东西有什么想法吗?我无法重现错误,这真的让我退缩了。
编辑——我应该注意我正在使用默认的数据库支持的会话。
这是我的注册/登录视图
def splash_register(request):
if request.session.get('beta'):
if request.method=='POST':
userform=MyUserCreationForm(request.POST)
if userform.is_valid():
#username of <30 char is required by Django User model. I'm storing username as a hash of user email
user=userform.save(commit=False)
user.username=hash(user.email)
user.save()
username=user.username
password=str(userform.cleaned_data['password'])
user=auth.authenticate(username=username, password=password)
if user is not None:
auth.login(request,user)
request.session['first_visit']=True
return HttpResponseRedirect("/")
else:
return HttpResponseRedirect('/splash/register/')
else:
userform=MyUserCreationForm(request.POST)
return render_to_response("website/splash_register.html", {'userform':userform}, context_instance=RequestContext(request))
return render_to_response("website/splash_register.html", context_instance=RequestContext(request))
else:
return HttpResponseRedirect('/splash/')
【问题讨论】:
-
您是否像相关帖子一样使用 mod python?当我开始学习 python 时,我被大量引导到 mod_wsgi。我不能说这会解决任何问题。
-
嗨詹姆斯,我正在使用 mod_wsgi。
-
我在求人帮助我...
-
@brendan 我认为主要问题是您提到您无法复制它?你确定你能修复它吗?
-
也许在这个阶段彻底解决它很困难,但我希望有一个通用的起点。现在,我认为这要么是我的服务器配置(线程)、我的会话后端(我现在只是使用默认数据库来存储会话数据)的问题,要么是与“测试版”会话变量相关的问题(尽管我不明白)。那里的任何线索都会非常有帮助。
标签: django apache session caching cookies