Проще всего описать мою проблему на рабочем примере: даже если вы не вошли в систему, YouTube запоминает то, что вы смотрели, и в следующий раз дает вам предложения на основе ранее просмотренных фильмов.
Мой сайт в чем-то похож: пользователи могут голосовать за статьи, не входя в систему, а сайт запоминает голоса с помощью файлов cookie. Я нашел рабочий метод, но должен быть более простой способ - также теперь использование БД совсем не оптимизировано.
Для каждого посетителя есть проверка, есть ли у него куки. Если да, я спрашиваю его голоса. Если нет, я создаю фиктивного пользователя и отправляю ему файлы cookie. Теперь я сохраняю временную метку этого пользователя «last_visit». После этого все одинаково для обоих пользователей. Моя проблема в том, что моя БД заполняется фиктивными пользователями, поэтому срок действия моих файлов cookie истекает через 3 месяца, а мой сайт регулярно проверяет, какие пользователи не посещали мой сайт за последние 3 месяца, и удаляет их из БД.
Я знаю, что слишком усложнил это, но моя система голосования использует AJAX, и я не смог найти способ отправить файл cookie (и создать фиктивного пользователя) только в том случае, если происходит голосование, а не каждый раз, когда простой посетитель просматривает мой сайт - без голосования.
Также примечание: я настаиваю на использовании файлов cookie — я знаю, что было бы проще хранить IP-адреса, когда происходит голосование, но есть школы, предприятия, использующие один и тот же IP-адрес, и мне нравится разрешать их пользователям использовать мой сайт.
Что я здесь пропустил? Как это можно оптимизировать?