会话刷新不工作django

时间:2015-04-01 00:35:19

标签: python django session

我正在尝试在用户不想登录时刷新所有会话数据。

在views.py中

def login(request, *args, **kwargs):
    if request.method == 'POST':        
        if not request.POST.has_key('remember_me'):      
            request.session.flush()

    return auth_views.login(request, *args, **kwargs)

但是当我尝试访问该网站时,它仍然以用户登录的方式显示用户。这有什么问题?

3 个答案:

答案 0 :(得分:2)

根据我的理解,如果用户未选中Remember me - 如果用户的浏览器已关闭,您需要使会话Cookie失效

这可以使用set_expiry(0)

来实现
  

设置会话的到期时间。您可以传递许多不同的值:

     
      
  • ...
  •   
  • 如果值为0,则当用户的Web浏览器关闭时,用户的会话cookie将过期。
  •   

用法:

request.session.set_expiry(0)

另见:

答案 1 :(得分:0)

您可能已经尝试过此操作,但如果您使用的是django.contrib.auth.views,那么您可以尝试调用django.contrib.auth.logout(request)来注销用户,如果他们不想被记住,那么请按照您的身份登录现有代码:

from django.contrib.auth import logout

def login(request, *args, **kwargs):
    if request.method == 'POST':        
        if not request.POST.has_key('remember_me'):
            saved_user = getattr(request, 'user', None)
            logout(request)
            if saved_user is not None:
                request.user = saved_user

    return auth_views.login(request, *args, **kwargs)

这应该有效,因为在幕后调用了django.contrib.auth.login()。文档说明会议已被清除。

答案 2 :(得分:-1)

我认为解决该问题的最简单方法是使用 django-session-security 它在注销用户之前警告用户 并从用户的活跃度(例如屏幕移动)开始计算会话次数。