There is no perfect way to allow 1 vote per machine.
You can use the cookies method; but you'll encounter the cookies clearing problem that kirk mentioned. The biggest problem with using cookies is that someone could turn off cookies and vote as many times as they want. Someone can also easily write a program that casts many votes without sending a cookie (your PHP script will think it's a new person each time).
Another way to do it is keep track of IP addresses of all votes that have been cast. With this method, only 1 vote can be cast from a given IP. But this is a problem for people behind a proxy or firewall, where the IP the script sees is the IP of the proxy/firewall. So if 1 person behind a firewall has voted, no one else behind the same firewall may vote.
This first method allows someone to vote more than once, the second may prevent people from voting at all.
In short, there has yet to be a voting implementation that counts exactly 1 vote per person (if there are any, I'd love to know). One possible exception, perhaps, are sites that require a person to log in to vote. This would work, provided there's only 1 account per person.