Put a hidden field in the form, uniquely generated. When the response comes back, check the hidden field against the list of previously processed forms. If it's not there, process the form and put it there. If it's there, ignore the form with a big "DON'T HIT RELOAD" warning, or return what you returned last time.
-- Randal L. Schwartz - On 16 Apr 2001, on comp.infosystems.www.authoring.html