Re: Preventing multiple submits

[email protected] Thu, 17 Feb 2005 11:41:21 -0800
Newsgroups gmane.comp.apache.mod-ruby
Message-ID <[email protected]>
On Thu, Feb 17, 2005 at 01:11:50PM -0600, [email protected] wrote:
> Correct me if I'm wrong on this, but I think a cookie has
> to make a round trip back to the client to be set, so that
> would not prevent resubmits if the user clicks again while
> the original request is still processing.

That would be correct.  The cookie approach would not work if a
user presses the submit button while the server is still
processing the previous submit.  It would only work if the
processing was completed and then the user pressed the button
again.

> 
> Another low-tech-ish way to deal with this would be to have
> your app code check the database before inserting a new record
> for entries from the same user along with some distinguishing
> feature of the item -- for example, if it were a BBS post,
> you could check the Subject line; for a user account entry,
> you could concatenate FirstName + LastName  -- and set a time
> window, say two minutes.
> 
> So, in short -- if:
> Same user creating the entry
> Same FirstName + LastName
> In the last two minutes
> 
> You could safely assume that it's a re-post , and you could
> return an error to users notifiying them that they are
> attempting a duplicate post.
> 
> This might be a nice fallback is the user has JavaScript turned
> off, and you can't just disable the Submit link after a post.
> 
> 
> Matthew
> 
> 
> 
> On Thu, Feb 17, 2005 at 10:40:24AM -0800, the entity known as [email protected] wrote:
> > Andi Scharfstein,
> > 
> > On Thu, Feb 17, 2005 at 12:39:22PM +0100, Andi Scharfstein <[email protected]> wrote:
> > > Hi,
> > > on my website, there is a form where users can submit data to the
> > > site. I was just wondering if there was a simple (server-side) way to
> > > check if the user has already submitted something and preventing him
> > > from submitting the same thing twice (because he clicked on 'Submit'
> > > multiple times because the site took a little longer to load, or
> > > something along those lines). Can you achieve this in mod_ruby without
> > > resorting to more than moderately complex measures?
> > 
> > You could use a cookie.
> > 
> > When form is submitted, check for cookie.  If set, assume it is a
> > resubmit.  If no cookie is present, assume it is a new submit and
> > then set a cookie to prevent another submit.