2013-04-10 139 views
3

您好我是服務器端編程(Java)的新手,並且正在讀取SendRedirect與Forward之間的區別。 從Post-redirect-get pattern它解釋,這將阻止通過點擊刷新按鈕重新提交修改。但是,如果服務器端後處理很繁重,並且在服務器處理帖子並在發送3xx重定向之前,用戶刷新頁面?服務器如何知道忽略連續的第二個傳入請求?SendRedirect「防止重新提交」保證?

回答

0

我明白你的觀點,事實上,PRG保證可以防止雙POST提交,包括後退按鈕,前提是前面的重定向是,所以瀏覽器現在可以發送GET請求。

但是,如果在進行重定向之前運行一個長進程,會發生什麼?

有我來處理這種情況下,兩個已知的方法:

  • 這是合乎邏輯的,PGR目標不會滿足,如果你有一個長期的過程重定向之前做;所以如果有人遇到這種麻煩,那麼您可以簡單地將您的重定向發送到可以向用戶顯示進度的頁面(可選),這類似於Ajax。

  • 這一個我還沒有嘗試過,但它的真正邏輯Synchronization Token pattern,所以它基本上是基於在你的頁面設置一個隱藏的道理,那麼當POST請求被髮送到服務器,你會被任何數量的遞增該令牌和store it into session,所以下次用戶單擊提交按鈕或刷新頁面時,您可以使用compare the token,每當您的頁面與存儲在會話中的頁面一起顯示時,這是您可以避免處理與同一用戶關聯的相同請求的另一種方式一遍又一遍。

我給你這個鏈接,如果你想查詢更多關於它http://www.deepakgaikwad.net/index.php/2009/03/19/post-redirect-get-design-pattern.html

希望這是有用的......

+1

這是PRG,而不是PGR :) – skuntsel 2013-04-10 17:58:40

+0

哈哈......你對...我會編輯 – 2013-04-10 18:02:10

+0

只是一個錯字...修正 – 2013-04-10 18:15:47