Using their IP address is generally a bad idea. This stems from the fact that not everyone has a static (permanent) IP address. People who use dial up, for instance, will not always get the same IP (in fact, it's usually different). So, what happens if you get 2, or 3 people that use the same ISP. One person votes, and gets offline. Someone else signs on, stumbles across your site, with the same IP as the first person.... they can't vote now.
Cookies are a good idea, but keep in mind that cookies can be erased/refused by the visitor. There is always a way for someone to get around it, so that they can vote more than once if they really want to.
The only viable way to begin this application is with a solid data definition and schema for your Voter's database. You need to provide a User Record with such fields as Name, Address, City, State, Zip, and Telno. You may need to treat all those fields as part of an aggregate key to uniquely identify the user. Or you store Drivers License or SSN but then how will you ensure the data is valid ... you will need access to a State or Federal databse - GOOD LUCK.
Thus if your database and web app are to ever get off the ground they definitely need to be sanctioned or endorsed by political interests. Wouldn't hurt to get to know the local congressman. Key things to consider: always encrypt any sensitive user data, and generate a time sensitive key the user has to enter (for example, like the one used when you purchase tickets on TicketMaster's website ).
Note, this database has to be bullet-proof, and have plenty of statistics. At the end of the day your system will be put on trial by people that lose elections as well as proponents of other solutions. So in the final analysis if the data cannot be defended then your app is not only a liability but possibly a target for "disenfranchised" voter lawsuits. Put it this way, you dont want your app to be considered the next hanging chad.