Собирать максимальное количество данных о компьютере/браузере (IP, разрешение экрана, цветность, и т.д. и т.п.), сливать в единую строку, делать MD5 и хранить этот MD5. Ставить куку, что проголосовал.
Перед голосованием, если нет куки проголосовавшего, то проверять данные на совпадение (MD5). Чем больше данных, тем больше шансов, что голосование будет корректно.
Это наиболее простой способ.
Более сложный метод: можно хранить параметры отдельно и проверять с учетом частичного совпадения. Распределять параметры по весам. Если вес совпавших параметров превышает допустимый, то значит посетитель уже голосовал.
Вообще, хорошей, но в то же время простой в использовании готовой библиотеки - не встречал, поэтому пару раз пришлось пилить свой велосипед.