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()
Вернуться на верх