使用者回報:某個可上傳附件的表單功能出現詭異附件重複現象。第一次上傳檔案 A 送出表單一切正常,填第二張上傳檔案 B,送出後檢視冒出兩個附件 - 檔案 A 與檔案 B;再填第三張上傳檔案 C,這回表單附件變成三個 - 檔案 A、B、C 並存。

附件重複事小,要是張冠李戴甲使用者填寫冒出乙使用者的附件事情就大條了。所幸,沒有其他人回報相似問題;使用相同操作程序測試亦未重現問題,研判屬於個案。

分析問題來源,網頁採附件容器概念,每次填寫新表單時建立新容器,使用者可以上傳一到多個附件檔案到容器內(檔案資料有 Foreign Key 指向容器 Primary Key 形成關聯)。容器的 Primary Key 是每次開新表單時在 C# 端以 Guid.NewGuid() 產生,不可能重複。而多張表單的附件不斷累積,最有可能的原因是一直沿用相同的容器 GUID...

申請搜索票檢查使用者的瀏覽器設定,登楞!

居然被設定成「永不」檢查儲存的畫面是否有較新的版本,意味著除非使用者按重新整理或清除 Cache,否則它會永遠使用之前記下的 HTML 內容,原本應該每次開啟新表單重新產生容器 GUID,變成從頭到尾共用相同容器不斷累加附件;新表單介面假設容器是全新的,故畫面不需顯示容器已存在檔案,容器中存先前上傳過的附檔在送出表單後才冒出來。找到問題根源鬆了一口氣,真是使用者環境設定導致的個案,不致發生不同使用者檔案錯亂的慘案。

調查過程查到舊文,發現一件令人慚愧的事實,這茶包我兩年多前就遇過,當時還說:

設計網站時一定要防範使用者「使用Cache內過時內容送出表單或進行交易」,AJAX及SPA程式寫多了常就疏忽掉這點,本起案例讓我重新喚起警覺...

久沒踩雷就疏忽了,決定在手臂刺上 NoCache重新將這點納入網頁開發 SOP,再忘記我就是豬頭。

A case of duplicated HTTP POST data caused by unexpected cache behavior.


Comments

Be the first to post a comment

Post a comment