我有時會想知道當您多次提交表單並且Internet服務器正在處理先前的請求時會發生什麼?在任何特殊情況下是否會有任何問題?同一瀏覽器對Internet服務器的多個請求
編輯在客戶端的任何問題?例如當網絡服務器發送兩個響應?
我有時會想知道當您多次提交表單並且Internet服務器正在處理先前的請求時會發生什麼?在任何特殊情況下是否會有任何問題?同一瀏覽器對Internet服務器的多個請求
編輯在客戶端的任何問題?例如當網絡服務器發送兩個響應?
每個表單提交將被分開處理,可能很多並行處理。根據您的應用程序,這可能會或可能不會搞砸數據服務器端。如果HTTP連接被刪除,服務器端腳本可能會停止處理(再次單擊「提交」,第一個請求被取消併發送新請求時)。
爲了避免多次提交的問題,您可以例如發送一個唯一的ID與將在服務器上檢查的表單,並且只能使用一次。或者,您可以在用戶的會話中設置「正在處理」標誌。或者您可以使用作業隊列並檢查用戶的作業是否已經存在。具體情況取決於您的應用程序。
回覆:「客戶端的任何問題?例如,當Web服務器發送兩個響應?」
只要您的瀏覽器發送請求,它就會建立到服務器的連接,並等待響應。新請求,新連接。當你第二次點擊一個提交按鈕時,第一個連接被刪除,並建立一個新的連接(這也是服務器通常停止處理舊請求的地方)。這就是爲什麼你可以同時在瀏覽器中加載同一網站的多個頁面,它不會混淆哪個響應打算進入哪個標籤。
在電子商務網站上,人們不小心購買了多次,因爲他們不耐煩,並在等待(有時很慢)的響應之前不斷點擊提交按鈕。
在這種類型的應用程序中按下後禁用提交按鈕是個好主意。
一個簡單的解決方案,不需要仔細的同步或線程之間的協調是協調事件發生後過於靠近的行爲。用戶是否在半秒內點擊了兩個廣告?他們不太可能實際訪問了第一個網站。用戶是否每隔一分鐘就提交兩份相同包裝的商品訂單?可能是一個錯誤。
只要你有一種方法來識別相同的事件,或者甚至「來自同一個人」太靠近在一起,你可以使用這種技術。
禁用提交按鈕不是一個非常可靠的解決方案,但它可以做更多的事情。 – deceze 2009-07-16 13:22:39