Django Channels - Получение списка всех активных сессий, или выполнение чего-либо, когда сессия "закрыта".
Я использую WebsocketConsumer, и храню данные, связанные с пользователем, в кэше, Я привязываю это к обоим, пользователю и сессии
user = self.scope["user"]
session = self.scope["session"]
и когда WebsocketConsumer отключается, я очищаю все данные, связанные с этой сессией и пользователем
from channels.generic.websocket import WebsocketConsumer
class MyConsumer(WebsocketConsumer):
def connect(self):
self.store_session_data()
def disconnect(self, _):
self.clean_session_data()
def websocket_disconnect(self, _):
self.clean_session_data()
Я делаю это потому, что у пользователя может быть несколько вкладок, открытых в одном приложении, и, следовательно, несколько сессий, и я не хочу, чтобы на одной вкладке очищалось что-то, что может быть ценным для второй вкладки
Если пользователь отключается, как и ожидалось, все идет правильно
Но если браузер закрыт, то ни disconnect
, ни websocket_disconnect
не вызываются. И данные, относящиеся к предыдущей сессии, остаются нетронутыми
Вопросы
A) Есть ли способ выполнить что-то независимо от того, как закрыт WebsocketConsumer?
B) Альтернативным способом может быть получение всех активных сессий и очистка всего, что связано с неактивной сессией
Выполнимо ли это?
Я тоже не смог найти, как это сделать
Есть мысли?
Используя websocket_disconnect вместе с disconnect, я смог правильно очистить данные сессии независимо от того, как было закрыто соединение
class MyConsumer(WebsocketConsumer):
def connect(self):
self.store_session_data()
def disconnect(self, _):
self.clean_session_data()
def websocket_disconnect(self, _):
self.clean_session_data()