Django / Auth:logout清除会话数据?

时间:2013-04-05 20:26:04

标签: django session-variables django-authentication django-sessions

我想知道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')

谢谢!

2 个答案:

答案 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 了解更多信息。