diff --git a/osinaweb/osichat/__pycache__/consumers.cpython-310.pyc b/osinaweb/osichat/__pycache__/consumers.cpython-310.pyc index 938a79ac..5a5cd26e 100644 Binary files a/osinaweb/osichat/__pycache__/consumers.cpython-310.pyc and b/osinaweb/osichat/__pycache__/consumers.cpython-310.pyc differ diff --git a/osinaweb/osichat/consumers.py b/osinaweb/osichat/consumers.py index cb553dbf..307b51d7 100644 --- a/osinaweb/osichat/consumers.py +++ b/osinaweb/osichat/consumers.py @@ -5,19 +5,28 @@ from django.template.loader import render_to_string from asgiref.sync import async_to_sync from django.shortcuts import get_object_or_404 import requests +from django.contrib.sessions.models import Session class OsitcomVisitor(WebsocketConsumer): def connect(self): - cookie_header = self.scope.get('headers', {}) - http_cookie = dict(cookie_header).get(b'cookie', b'').decode('utf-8') - for cookie in http_cookie.split('; '): - key, value = cookie.split('=') - if key == 'sessionid': - self.session_id = value - break - else: - self.session_id = 11 + cookie_header = dict(self.scope.get('headers', {})).get(b'cookie', b'').decode('utf-8') + + self.session_id = None + if cookie_header: + for cookie in cookie_header.split('; '): + key, value = cookie.split('=', 1) + if key == 'sessionid': + self.session_id = value + break + + if not self.session_id: + self.session_id = self.scope.get('session', {}).get('_session_key') + + if not self.session_id: + # Handle missing session_id scenario, maybe reject the connection + self.close() + return async_to_sync(self.channel_layer.group_add)( 'ositcom_visitors', self.channel_name )