2012-02-17 2 views
5

Это самый простой способ описать мою проблему с рабочим примером: даже если вы не вошли в систему, YouTube помнит, что вы наблюдали, и в следующий раз дает вам советы на основе предыдущих просмотренных фильмов.Как я могу запомнить голосование с помощью куки-файлов проще, чем это?

Мой сайт аналогичен в своем роде: пользователи могут голосовать за статьи без входа в систему, а сайт запоминает голоса с кукисами. Я вычислил рабочий метод, но должен быть более простой способ - и теперь использование БД ничего, кроме оптимизированного.

Для каждого посетителя есть чек, если у него есть куки. Если да, то я прошу его голоса. Если нет, я создаю фиктивного пользователя и отправлю ему куки. Теперь я храню эту метку времени «last_visit» пользователей. После этого все одинаково для обоих пользователей. Моя проблема заключается в том, что моя БД заполняется фиктивными пользователями, поэтому я допустил, что мои файлы cookie истекают через 3 месяца, и мой сайт регулярно проверяет, какие пользователи не посещали мой сайт за последние 3 месяца, и удаляет их из БД.

Я знаю, что я слишком усложнил это, но моя система голосования использует AJAX, и я не мог найти способ отправить cookie (и создать фиктивного пользователя) только в том случае, если голосование происходит, а не каждый раз, когда простой посетитель просматривает мой сайт - без права голоса.

Также примечание: я настаиваю на использовании файлов cookie - я знаю, что было бы проще хранить IP-адреса при голосовании, но есть школы, предприятия, использующие один и тот же IP-адрес, и мне нравится позволять их пользователям использовать мой сайт.

Что я пропустил здесь? Как это можно оптимизировать?

ответ

1

Если у них нет постоянного аккаунта, зачем вообще хранить что-либо, связанное с ними в базе данных? просто записывайте свои предыдущие голоса в cookie. вы также сохранили бы все голоса в db, но анонимно, и не относите их к «пользователям» вообще.

+0

Я должен был упомянуть об этом: на моем сайте даются предложения, основанные на голосах, например: «кто голосовал за это, также проголосовал за них», поэтому я как-то связал голоса в БД. В настоящее время я использую пользователей для этого (манекены или настоящие пользователи). – ZTefter

+1

@ZTefter Получил это. Немного сложнее. Вы все равно можете записать, кто голосовал за какой-то случайный хэш или что-то, что хранилось в cookie. Просто присоедините хеш к записям голосов, но фактически не создавайте записи пользователей. – dqhendricks

+0

Хорошо, спасибо, я думаю, что попробую. Но я все еще придерживаюсь части, создающей куки. Голосование - это функция javascript AJAX, которая вызывает файл PHP с параметрами. Поэтому теоретически этот PHP должен создать cookie, это было бы лучше, но я не мог этого добиться. Действительно ли это возможно? Это правильный способ сделать это? – ZTefter

 Смежные вопросы

  • Нет связанных вопросов^_^