【发布时间】:2021-02-02 04:14:08
【问题描述】:
如果我在刷新第一个浏览器时登录另一个浏览器,出于某种原因,我会返回 http 400(错误请求)。我只想实现一个用户一次只能有一个活动会话。
models.py
class UserSession(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
session = models.OneToOneField(Session, on_delete=models.CASCADE)
信号.py
@receiver(user_logged_in)
def remove_other_sessions(sender, user, request, **kwargs):
# remove other sessions
old_sessions = Session.objects.filter(usersession__user=user)
if request.session.session_key:
old_sessions = old_sessions.exclude(session_key=request.session.session_key)
old_sessions.delete()
# save current session
request.session.save()
# create a link from the user to the current session (for later removal)
UserSession.objects.get_or_create(
user=user,
session=Session.objects.get(pk=request.session.session_key)
)
出于某种原因,第一个浏览器不会删除会话,而是保留会话,我会返回 http 400,直到我手动删除会话密钥。 我希望如果会话密钥不再存在,用户将被重定向到登录。能帮忙?
亲切的问候
【问题讨论】: