2010-04-21 2 views
3

Я читал о stackoverflow о создании систем голосования на PHP, которые минимизировали злоупотребления/множественное голосование от одного и того же пользователя, но я не нашел ответа на свой вопрос.Система голосования PHP с сеансами?

У меня есть приложение, в котором пользователям не нужно регистрироваться для голосования или «как» запись. Очевидно, я хочу свести к минимуму злоупотребления, и я не хочу ограничивать голоса на IP-адрес, потому что некоторые организации (включая мои) используют общие IP-адреса.

Раньше я никогда не использовал сеансы в системе, не прошедшей проверку подлинности, но поскольку это приложение сосредоточено вокруг голосов за вход (используется для чисто развлекательной ценности, но я все равно хотел бы минимизировать злоупотребления) Мне было интересно, будет работать, и есть ли какие-либо недостатки, такие как последствия производительности, и является ли это даже можно использовать сессии таким образом:

  • начать сеанс, когда сайт загружается
  • позволяют один голос за единицу каждой сессии

Если это плохая идея, мои альтернативные варианты состоят в том, чтобы разрешить разумное количество голосов на IP-адрес (скажем, 25) или установить ограничение по времени между голосами с одного и того же IP-адреса.

Что вы, ребята, рекомендуете/что вы считаете наиболее раздражающим для пользователя? Перезапуск браузера, ожидающий 5 минут между голосами или очистка файлов cookie?

+0

Я рекомендую не использовать результаты ни для чего иного, кроме развлекательного значения. – gnud

ответ

1

Только сеанс - плохая идея, потому что, если вы закроете браузер и придете снова, вы сможете проголосовать. Вы можете использовать сеанс как «помощь». Лучший вариант - использовать ip-ограничение. Также вы можете использовать файлы cookie, но это снова просто «помощник», потому что вы можете очищать файлы cookie от браузера. Я предлагаю вам использовать ip-ограничение, как вы сказали, один ip может проголосовать 25 раз и использовать файлы cookie, чтобы ограничить компьютер голосованием более одного раза. Поэтому, если пользователь хочет проголосовать более одного раза, он может удалить файл cookie, но он не сможет проголосовать более 25 раз.

5

Там действительно нет способа сделать «серьезной» системы голосования без аутентификации пользователя, все другие варианты имеют недостатки:

  • сессия заканчивается, когда вы закрываете браузер, так что просто открыть его и you'r свежие
  • печенье ваш лучший выстрел, но они могут быть очищены или даже отказался
  • IP-адреса являются ненадежными и/или не применяется
+0

Сессии не завершаются автоматически, когда браузер закрыт. Вы можете делать сеансы, которые продолжаются всю жизнь (или, по крайней мере, до тех пор, пока файл cookie не будет удален). В этом отношении они равны вашему варианту № 2, поскольку сеансы реализуются с использованием файлов cookie. – deceze

+0

Выполнение автоматически завершается, когда браузер закрыт, по умолчанию. Вы можете изменить это, но тогда у вас есть те же проблемы, что и у вас с файлами cookie. Сеансы работают без файлов cookie. –

1

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

Если говорить об IP-адресах, пользователи могут использовать прокси-серверы для обхода «фильтрации IP-адресов».

Когда голосование заканчивается, кто-то может просмотреть результаты, чтобы узнать, есть ли что-нибудь подозрительное (например, 100 голосов от одного IP за 5 минут) - это поможет получить более правдивые результаты.

+1

Почему все говорят, что сеансы заканчиваются, когда браузер закрыт? Это чепуха. Это зависит от типа используемого сеанса/файла cookie. – deceze

+0

Ну, я говорю, что отчасти потому, что я очищаю файлы cookie, когда закрываю браузер, и призываю других сделать то же самое. – gnud

+1

deceze, это потому, что это * стандарт * поведение PHP при использовании 'session_start()' – binaryLV

0

Вы можете использовать как файлы cookie, так и механизм кеша сервера, например apc/memcached. Храните результаты голосования в файле cookie и в кеше apc с использованием одного и того же имени ключа/файла cookie и проверьте наличие обоих.Если файл cookie удален, но ключ apc все еще существует, вы знаете, что кто-то пытается повторить голосование, и вы можете просто сбросить файл cookie и увеличить время жизни значения кеша apc.

Это не пуленепробиваемый, но в отсутствие базы данных я считаю, что это хорошее решение. Имейте в виду, что если сервер закончит работу, он очистит кеш apc.

+0

просто из любопытства, почему голос? –