Removing sessions from Redis (Django) -
i'm using django , redis session engine (also celery, else). works , can see improvement in speed.
session_engine = 'django.contrib.sessions.backends.cached_db' i have script runs every minute check active users through methods , if user hasn't been active in latest minute, session gets removed. done customer's tracking needs.
this script working until switched redis session engine. session gets indeed removed db not redis. i'm not using django built-in method own function:
def clean_sessions(): stored_sessions = session.objects.all() active_users = active_users(minutes=1) active_users_ids = [user.id user in active_users] session in stored_sessions: session_uid = session.get_decoded().get('_auth_user_id') if not session_uid: session.delete() continue if session_uid not in active_users_ids: user = user.objects.get(pk=session_uid) ## code between ## session.delete() my question is, how remove session cache well, user logged out?
it wasn't straightforward able fix it. imported file have clean_sessions():
from importlib import import_module django.conf import settings then, inside function, loaded sessionstore object:
sessionstore = import_module(settings.session_engine).sessionstore from there, easy remove sessions, leaving method this:
def clean_sessions(): stored_sessions = session.objects.all() active_users = request.objects.active_users(seconds=15) active_users_ids = [user.id user in active_users] session in stored_sessions: sessionstore = import_module(settings.session_engine).sessionstore s = sessionstore(session_key=session.session_key) session_uid = session.get_decoded().get('_auth_user_id') if not session_uid: s.delete() continue if session_uid not in active_users_ids: ## code ## s.delete() it's important load right sessionstore whatever session engine you're using, otherwise fail remove both places (db , cache).
Comments
Post a Comment