Uniquely identifying voters
- Have a strong captcha (like recaptcha) that prevents automated attempts. This blocks spoofed IPs and bots.
- Store an identifier in a cookie. This helps catch people on same computer and browser with different IP.
- Store the IP on the server. This helps catch people with multiple computers or browsers on the same home network. Unfortunately, this may also block everyone but Bob from voting at the big GM plant down the street. Tell them to vote from home.
Don't worry about user agent if you're verifying by IP from above. It's redundant.
If you follow all three guidelines, you might as well update the votes in real time because you cannot disqualify any vote that passes the above criteria. You probably shouldn't even show the vote button if they can't vote, unless you're going to let people change their votes, which is also a good idea if there will be late entries.
If I were voting, I'd want to be able to vote for a story immediately after I read it, then if I found a story I liked better, I'd want to be able to change my vote.
Voting system
Now, regarding the voting, you might want to require votes on at least three different short stories from the same "person" before you count any votes. You'll have a better chance of having the most popular story end up as the winner that way.
For example, if I send the link to all my friends to vote for my story, they'll also have to pick some other stories, probably the better ones. There is the chance that the worst movie ends up winning as people might vote for the worst two and their own to get the vote, however, in practice, I've never seen this happen. This is based on 7 years of film festivals that all use this system.
Also, for an Internet contest, it's absolutely crucial that everyone gets equal time at the top of the page, so you should figure out some way to rotate, or at least randomize, the entries.
Always put something in the contest rules about the judges getting the final word.