to put it blankly: It cannot be done (at least i can't imagine a way of ensuring everyone can only vote once in an anonymous vote).
There are several approaches u could try nonetheless:
- IP-Adresses: You can try to remember every IP-Adress that has already voted. But keep in mind, that firewalls masq IP's so that from outside a LAN with some hundred computers looks like one. Another thing are dial-up user which get assigned a new IP whenever they dial up
- Cookies: You can set cookies and try to identify those who already have voted. But as you pointed out yourself people can delete cookies
- Session Management: With SM you can ensure that someone can only vote once per session. But as soon as someone starts a new session he can vote again.
The fact is that to get accurate votes you need an information which is unique and on which the user has no influence. If it's a vote for registered user only you could use something like a user id. Every registerd user has one and he can't change it.
"WHAT CAN THE HARVEST HOPE FOR IF NOT THE CARE OF THE REAPER MAN"
-- Terry Pratchett, "Reaper Man"