How to lookup django session for a particular user?

后端 未结 6 1515
太阳男子
太阳男子 2020-12-07 11:13

I am writing an application where I will be accessing the database from django and from a stand alone application. Both need to do session verification and the session shoul

6条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-07 11:44

    This answer is being posted five years after the original question, but this SO thread is one of the top Google results when searching for a solution to this problem (and it's still something that isn't supported out of the box with Django).

    I've got an alternate solution for the use case where you're only concerned with logged in user sessions, which uses an additional UserSession model to map users to their sessions, something like this:

    from django.conf import settings
    from django.db import models
    from django.contrib.sessions.models import Session
    
    class UserSession(models.Model):
        user = models.ForeignKey(settings.AUTH_USER_MODEL)
        session = models.ForeignKey(Session)  
    

    Then you can simply save a new UserSession instance any time a user logs in:

    from django.contrib.auth.signals import user_logged_in
    
    def user_logged_in_handler(sender, request, user, **kwargs):
        UserSession.objects.get_or_create(user = user, session_id = request.session.session_key)
    
    user_logged_in.connect(user_logged_in_handler)
    

    And finally when you'd like to list (and potentially clear) the sessions for a particular user:

    from .models import UserSession
    
    def delete_user_sessions(user):
        user_sessions = UserSession.objects.filter(user = user)
        for user_session in user_sessions:
            user_session.session.delete()
    

    That's the nuts and bolts of it, if you'd like more detail I have a blog post covering it.

提交回复
热议问题