1.源由
本人在工作上剛好又遇到此問題,
Browser的「上一頁」讓同樣的資料處理了多次。
就把處理方式記下來吧。
Browser的「上一頁」讓同樣的資料處理了多次。
就把處理方式記下來吧。
問題情境如下:
- 假設有兩個WebPage:
WebPageA_DoJob 處理資料,有敏感性的資料,如:錢、帳號等。
WebPageB_Done 顯示完成訊息。 - 出問題的執行情境如下:
- 執行到WebPageA_DoJob,並填好資料。
- WebPageA_DoJob.submit 進到 WebPageB_Done。
- WebPageB_Done 按「上一頁」。
- WebPageA_DoJob.submit 再跑了一次。
- 完蛋,同樣的資料處理做了兩次。要是轉帳程式的話,就準備拜拜吧。
問題很明顯的就出在Browser的「上一頁」功能。
2.目的, spec. statement.
首先先了解問題的根源,其問題情境如下:
- 假設有兩個WebPage:
- WebPageA_DoJob 處理資料,有敏感性的資料,如:錢、帳號等。
- WebPageB_Done 顯示完成訊息。
- 出問題的執行情境如下:
- 執行到WebPageA_DoJob,並填好資料。
- WebPageA_DoJob.submit 進到 WebPageB_Done。
- WebPageB_Done 按「上一頁」。
- WebPageA_DoJob.submit 再跑了一次。
- 完蛋,同樣的資料處理做了兩次。要是轉帳程式的話,就準備拜拜吧。
問題很明顯的就出在Browser的「上一頁」功能。
處理的方式就是把Browser的「上一頁」功能無效化。
3.解法, solution
先了解一下Brower「上一頁」的原理,
Browser「上一頁」是一種Cache機制,將WebPage暫存在Browser端,以省下loading的時間。
若只是瀏覽Web,「上一頁」機制是很讚的。可處理敏感性資料就頭痛了。
解法就是把該Cache關掉就行了。
在Web上找來找去,找到答案了。
參考資料:
MSDN論譠-問卷系統,填過的問題,就算回「上一頁」也無效 http://social.msdn.microsoft.com/forums/zh-TW/236/thread/683f4847-4372-491d-b6d8-a665c39779b9/?prof=required
把解留下:
在Page_Load()加上這一行指令要求Browser在此Page不留Cache。
Response.Cache.SetCacheability(HttpCacheability.NoCache);
此指令取代以前的 Response.Expires 和 Response.CacheControl 兩個功能用。
4.原碼
下面是本人實戰原碼。
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
//# 設定此頁面不留Cache,讓上一頁無法回來。
Response.Cache.SetCacheability(HttpCacheability.NoCache);
//## 初始化畫面。
......
}
}
下面是本人的應用情境說明:
- 首先設定好
- WebPageA_DoJob: 加上NoCache設定。把處理資料的WebPage設定NoCache。
- WebPageB_Done : 未設NoCache。
- 執行效果:
- 執行到WebPageA_DoJob,並填好資料。
- WebPageA_DoJob.submit 進到 WebPageB_Done。
- WebPageB_Done 按「上一頁」。
- WebPageA_DoJob 變成「網頁已過期」。
- 此時用「下一頁」還是可以回到原 WebPageB_Done 的畫面。並繼續工作。
沒有留言:
張貼留言