我正在尝试在用户不想登录时刷新所有会话数据。
在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)
但是当我尝试访问该网站时,它仍然以用户登录的方式显示用户。这有什么问题?
答案 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
它在注销用户之前警告用户
并从用户的活跃度(例如屏幕移动)开始计算会话次数。