Отслеживание сеансов Django с помощью пользовательских файлов cookie

Я ищу способ отслеживать время, которое пользователи проводят на сайте. Я нашел пакет django-tracking2, который отслеживает посетителей по сессии Django. Однако у меня срок действия сессии установлен на 2 недели, что делает его бесполезным для отслеживания ежедневной активности. Я думаю, что я могу создать другой файл cookie, срок действия которого истекает каждый день, чтобы использовать этот файл cookie для отслеживания. Однако, я не совсем понимаю, как именно я буду назначать случайный cookie каждый день для пользователей, поскольку в документации Django нет примеров на этот счет.

Желаемая логика:

  1. Когда пользователь открывает приложение, проверьте, установлен ли cookie custom_cookie
  2. .
  3. Если нет, создайте его со случайным значением (возможно, uuid4?)
  4. Срок действия cookie должен истечь в тот же день в полночь
  5. .

Я встречал такой способ создания cookies в промежуточном ПО, однако я думаю, что это даст разные случайные значения в объектах запроса и ответа:

class MyCookieProcessingMiddleware(object):

    # your desired cookie will be available in every django view
    def process_request(self, request):
        # will only add cookie if request does not have it already
        if not request.COOKIES.get('custom_cookie'):
            request.COOKIES['custom_cookie'] = uuid.uuid4()

    # your desired cookie will be available in every HttpResponse parser like browser but not in django view
    def process_response(self, request, response):
        if not request.COOKIES.get('custom_cookie'):
            response.set_cookie('custom_cookie', uuid.uuid4())
        return response

Если вы хотите сгенерировать токен длительностью только 24 часа или x и вам не нужно точное время

Используйте токен JWT

Вы также можете генерировать токены обновления, но их срок службы слишком короток.

Для отслеживания точного времени

Что вы можете сделать, так это создать случайное значение и отделить его с помощью . (точка). После точки вы должны добавить текущее время, а затем снова . (точка) после этой точки вы добавите время окончания. Это и будет ваша cookie.

Например - "qwerty1234567890-=.10:03:04.00:00:00"

Это нужно в том случае, если вы хотите, чтобы срок действия куки истекал до EOD

В приведенной выше строке qwerty1234567890-= - это uuid 10:03:04 - время начала 00:00:00 - время окончания разделенные DOT (.)

Вы также можете изменить время окончания на основе дельты времени (из python). Например -

ini_time_for_now = datetime.now()
future_date_after_24hours = ini_time_for_now + \ timedelta(hours = 24)
future_date_after_24hours =future_date_after_24hours.strftime("%H:%M:%S")
print(future_date_after_24hours)

Для отслеживания точного времени необходимо создать столбец precise_time в базе данных. Вы будете отслеживать точное время с помощью следующего метода.

Первый пользователь посетит вашу страницу, затем будет сгенерирован токен с временем начала и временем окончания.

Он будет сохранен в виде cookies в его браузере

в следующий раз, когда он снова посетит страницу, вы проверите, что время окончания == текущему времени (вы можете использовать split()) если нет, то время начала - время конца

Найти разницу во времени в целочисленном значении

Теперь вы сохраните это время в базе данных

Вы будете повторять этот процесс до тех пор, пока текущее время == конечному времени. Если это произойдет, то установите новую cookie.

Вы также можете добавить имя пользователя в строку cookie для уникальной идентификации пользователя. Моя концепция основана на JWT-токене.

Куки на заказ

Вы можете следовать описанному выше методу, только удалите время начала и добавьте только время окончания. Если текущее время == времени окончания, сгенерируйте новый токен с временем окончания и обновите его.

Вернуться на верх