我想知道auth.logout是否清除会话数据,或者我必须自己做。
from django.contrib.auth.decorators import login_required
from django.contrib import auth
@login_required
def logout(request):
auth.logout(request)
return redirect('base:homepage')
像这样......
from django.contrib.auth.decorators import login_required
from django.contrib import auth
@login_required
def logout(request):
for sesskey in request.session.keys():
del request.session[sesskey]
auth.logout(request)
return redirect('base:homepage')
谢谢!
答案 0 :(得分:14)
是。注销会刷新会话。
这是its source:
def logout(request):
"""
Removes the authenticated user's ID from the request and flushes their
session data.
"""
# Dispatch the signal before the user is logged out so the receivers have a
# chance to find out *who* logged out.
user = getattr(request, 'user', None)
if hasattr(user, 'is_authenticated') and not user.is_authenticated():
user = None
user_logged_out.send(sender=user.__class__, request=request, user=user)
request.session.flush()
if hasattr(request, 'user'):
from django.contrib.auth.models import AnonymousUser
request.user = AnonymousUser()
答案 1 :(得分:0)
如果您的意思是通过清除会话数据来删除 'django_session' 表中的记录,恐怕注销功能不会这样做。
通常,我们必须通过其他方式清除 'django_session' 表中过期的会话记录。像 crontab 任务一样定期运行 'python manage.py clearsessions'
See this 了解更多信息。