第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Django - 會話管理

Django - 會話管理

慕村225694 2021-11-30 15:56:38
我想防止同一個用戶帳戶在我的應(yīng)用程序中具有多個活動會話,并遵循此問題的答案。我將其實現(xiàn)到我的models.py:from django.conf import settingsfrom django.db import modelsfrom django.contrib.sessions.models import Sessionclass UserSession(models.Model):    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)    session = models.OneToOneField(Session, on_delete=models.CASCADE)from django.contrib.auth import user_logged_infrom django.dispatch.dispatcher import receiver@receiver(user_logged_in)def remove_other_sessions(sender, user, request, **kwargs):    # remove other sessions    Session.objects.filter(usersession__user=user).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)    )它工作得很好,但是,我注意到了一種奇怪的行為。如果我使用一個帳戶登錄,然后打開一個隱身窗口并使用相同的憑據(jù)登錄,第一個將被注銷(這正是我想要的)。但是,如果我使用帳戶登錄,然后關(guān)閉瀏覽器,下次我想登錄時,我會在行中收到錯誤消息:# save current sessionrequest.session.save()具有以下追溯(沒有太多信息..):更新錯誤在 /未提供異常消息控制臺日志顯示錯誤來自django.contrib.sessions.backends.base.UpdateError在此之后,如果我刷新頁面,則可以成功登錄。對可能發(fā)生的事情的任何見解?
查看完整描述

2 回答

?
PIPIONE

TA貢獻(xiàn)1829條經(jīng)驗 獲得超9個贊

您收到該錯誤是因為數(shù)據(jù)庫中不再有要更新的會話,您已經(jīng)刪除了其上方 2 行的所有活動會話。要解決這個問題,只需在清理它們時省略當(dāng)前活動的會話:


@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)

    )


查看完整回答
反對 回復(fù) 2021-11-30
?
慕無忌1623718

TA貢獻(xiàn)1744條經(jīng)驗 獲得超4個贊

@GwynBleidD 的回答很好!但這里有一個小錯誤:


if request.session.session_key:

        old_sessions = old_sessions.exclude(session_key=request.session.session_key)


應(yīng)該寫成:


if request.session.session_key:

        old_sessions = old_sessions.exclude(session_key=request.session.session_key).delete()

else:

    old_sessions.delete()


否則當(dāng)您第二次嘗試在同一臺計算機(jī)上登錄時會出現(xiàn)錯誤。


查看完整回答
反對 回復(fù) 2021-11-30
  • 2 回答
  • 0 關(guān)注
  • 199 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號