Отслеживание сеансов Django с помощью пользовательских файлов cookie
Я ищу способ отслеживать время, которое пользователи проводят на сайте. Я нашел пакет django-tracking2, который отслеживает посетителей по сессии Django. Однако у меня срок действия сессии установлен на 2 недели, что делает его бесполезным для отслеживания ежедневной активности. Я думаю, что я могу создать другой файл cookie, срок действия которого истекает каждый день, чтобы использовать этот файл cookie для отслеживания. Однако, я не совсем понимаю, как именно я буду назначать случайный cookie каждый день для пользователей, поскольку в документации Django нет примеров на этот счет.
Желаемая логика:
- Когда пользователь открывает приложение, проверьте, установлен ли cookie
custom_cookie
.
- Если нет, создайте его со случайным значением (возможно, uuid4?)
- Срок действия cookie должен истечь в тот же день в полночь .
Я встречал такой способ создания 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 и вам не нужно точное время
Вы также можете генерировать токены обновления, но их срок службы слишком короток.
Для отслеживания точного времени
Что вы можете сделать, так это создать случайное значение и отделить его с помощью . (точка). После точки вы должны добавить текущее время, а затем снова . (точка) после этой точки вы добавите время окончания. Это и будет ваша 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-токене.
Куки на заказ
Вы можете следовать описанному выше методу, только удалите время начала и добавьте только время окончания. Если текущее время == времени окончания, сгенерируйте новый токен с временем окончания и обновите его.