Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>You have your two answers, you need to decide which is best. No option is going to be bulletproof. It's all about slowing them down, and what level of effectiveness is acceptable for you.</p> <p>A cookie is generally the acceptable way to do this. Yes, cookies can be cleared, but if the desire to prevent duplicate voting is <em>that</em> important, than registration is the only effective way to prevent it. Any other mechanism could probably be beaten by those that want to. You could use something like <a href="http://samy.pl/evercookie/" rel="noreferrer">Evercookie</a>, but I don't generally think it's a good practice to do so. If you make your registration process simple, but effective, some users will do that.</p> <p>An IP address is just as flawed as most redisential IPs are not statically assigned. Someone could reset their modem, and get a new IP address. Or worse, someone could reset their modem, get an IP address that has already visited the site, and be unable to vote. Another scenario is users behind NAT. If 200 people are sharing an IP with NAT, then only one of them will be able to vote.</p> <p>You <em>could</em> get creative with the IP address though. Keep using the cookie, because that will be effective. If you start detecting multiple votes from the same IP address (because they cleared their cookies), display a <a href="http://en.wikipedia.org/wiki/CAPTCHA" rel="noreferrer">CAPTCHA</a>. If it <em>isn't</em> someone trying to abuse the system, then they still get the opportunity to vote. This will help defeat automated voting, and slow down users enough that abusing your voting system isn't worth their time. This as well, can be defeated, it's what level of effectiveness is acceptable to you. Even registration isn't purely 100% effective, but probably the most effective. What would stop someone from registering many times with different email addresses?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload