in reply to CGI and Sessions

What I'm curious about here is what kind of stuff are you taking? Comments? Guestbook? Loan application data?

If the stuff is not sensitive, and it's one time, you could set a cookie that says they submitted.

The cgi accepting the form data would first check if there is a previous record of this 'user' submitting data through this form.

Of course they could simply wipe out their cookie and submit again. But this method could be useful if the data is not sensitive, and what you are getting is more an annoyance then a security hole.

With a cookie and CGI::Session, you could do more interesting things. You can store just one cookie on their machine that identifies them as a client for you- and with a cgi session item, store multiple things like 'submitted_form_a', 'viewed_page_z' etc etc- and also, quite interestingly, you can store complex data structures in a cgi session (even objects?).

Cpan has very good documentation on how to implement CGI Session and use it to set cookies, retrieve them, etc.