input button 一個很嚴重的有關問題

來源:互聯網
上載者:User
input button 一個很嚴重的問題
我在一個退款頁面裡面,有個按鈕
按下這個按鈕,會執行sql,就是把別人付過錢的總數退還到他們的網站賬戶裡去。

問題就是,如果按一下這個cancel order是沒問題的,瀏覽器需要1,2秒反應。但是連續按,發現退還的錢會疊加啊!

比如一個使用者應該退10塊錢,他點cancel order連續點了10下,那麼他賬戶裡就會多100塊錢,應該不管他們點幾下,退還的都是10塊才對。

這應該怎麼解決?

------解決方案--------------------
提交完,就黑了那個按鈕。另外,使用session變數控制。提交的時候,對照一下,確定是否重複提交。
------解決方案--------------------
要是一般涉及到現金的支付頁面的話,肯定是在表單裡隱藏了一個訂單ID,重複提交的問題是不會存在的,因為資料庫做事務了。

這裡如果你的應用是很普通的,就是為了防止重複留言,那麼還是有點辦法來實現的。因為PHP自身是做不了這個事務的,也就是檢查ID是否被支付與之標記為支付這兩個操作只有資料庫可以保證事務原子性,另外一種辦法就是memcache的原子加法屬於一個巧妙手法。

這裡id不藉助session儲存了,因為session_start之後session變數都是本地化的,php進程之間無法共用,所以只藉助session_id把表單隱藏id存在memcache裡。

重新整理表單應該引發memcache裡的id放在隱藏欄位裡,提交表單應該引發memcache對該id原子加1,判斷原子加的傳回值是否為表單id+1,如果是就提交成功,否則提交失敗。這是變相的藉助memcache原子加法實現事務,因為原子加法避免了我們先取後加,而是原子的加1並返回結果,只要判斷-1之後是否等於id即可,也是一門奇淫巧計了,這和等冪性什麼的很類似,一些分布式無鎖操作都是這麼乾的。
------解決方案--------------------
瀏覽器裡面可以用disabled來禁用
建議服務端加個判斷,不然別人類比重複提交你就完了
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.