Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to lookup django session for a particular user?

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 should be the same for both of them. Django has a built in authentication/session verification, which is what I am using, now I need to figure out how to reuse the same session for my stand alone application.

My question is how can I look up a session_key for a particular user?

From what it looks there is nothing that ties together auth_user and django_session

like image 574
Sergey Golovchenko Avatar asked Oct 25 '08 05:10

Sergey Golovchenko


People also ask

How can I get session data in Django?

session_data : Django stores the session data in the encoded format. To get the raw data, use the get_decoded() method of the session object.

How does Django manage user sessions?

If you want to use a database-backed session, you need to add 'django. contrib. sessions' to your INSTALLED_APPS setting. Once you have configured your installation, run manage.py migrate to install the single database table that stores session data.

Where is Django session stored?

Django uses a cookie containing a special session id to identify each browser and its associated session with the site. The actual session data is stored in the site database by default (this is more secure than storing the data in a cookie, where they are more vulnerable to malicious users).


2 Answers

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.

like image 56
Gavin Ballard Avatar answered Sep 20 '22 11:09

Gavin Ballard


I found this code snippet

from django.contrib.sessions.models import Session from django.contrib.auth.models import User  session_key = '8cae76c505f15432b48c8292a7dd0e54'  session = Session.objects.get(session_key=session_key) uid = session.get_decoded().get('_auth_user_id') user = User.objects.get(pk=uid)  print user.username, user.get_full_name(), user.email 

here http://scottbarnham.com/blog/2008/12/04/get-user-from-session-key-in-django/

Have not verified it yet, but looks pretty straight forward.

like image 27
michael Avatar answered Sep 18 '22 11:09

michael