2011-11-16 114 views
0

我想發佈一些數據到服務器,作爲迴應,我想創建一個CSV文件,application/excel作爲MIME類型(最近被認爲是Internet媒體類型),強制瀏覽器在Microsoft Excel中打開生成的CSV文件。但是,我還希望防止用戶因刷新頁面而重新提交相同的信息(重新張貼表單)。發佈/重定向/獲取HTTP響應與應用程序/ excel MIME類型

通過簡單的CRUD操作,我使用Post/Redirect/Get模式,以便任何進一步刷新只會向服務器發送HTTP Get Request,不帶任何參數,因此不會更改服務器的狀態(Idempotence)。

當響應不是頁面而是文件時,阻止用戶重新提交(重新發布)相同信息到服務器的識別模式是什麼?

有什麼想法?

+0

請注意,如果嘗試刷新瀏覽器並重新POST數據,Firefox(我認爲IE和Safari)會發出警告。我注意到的最常見的(客戶端)方法是使用Javascript來禁用提交按鈕。如果您依賴某些瀏覽器合作,您還可以嘗試設置和檢查Cookie。 – MZB

回答

2

帖子/重定向/獲取模式是對瀏覽事件的回答。 在這裏,沒有瀏覽行爲(表單提交只能打開第三方應用程序,即Excel),所以任何類型的瀏覽相關模式都是無用的。

我建議你同時使用初次提交的服務器端跟蹤(帶也許唯一令牌),這樣就可以防止文件生成,並且易於寫出這樣<form onsubmit="this.onsubmit = function(){ return false ; }">

1

我公司可以提供客戶端腳本你另一個解決方案。

  • 拿你提交的數據的散列(MD5/SHA256 ..)。 hash將[相當]獨特。
  • 將它列入具有時間限制的會話列表中,例如5分鐘。
  • 即使您的用戶提交相同的數據。哈希將是相同的,你可以給你的用戶提供錯誤信息。

如果不同的用戶可以發佈相同的數據,您也可以在列表中保存用戶信息。並根據用戶給出錯誤信息。