2012-12-14 91 views
0

快速的問題,我已經嘗試瞭解自己,但使用會話變量可能會混淆,當試圖找出爲什麼或如何重新加載頁面和做/不做它應該做的。頁面重新加載是否會導致發佈?

在任何(非腳本)情況下,頁面是否會重新加載(使用JavaScript,f5,ctrl + f5,瀏覽器重新加載按鈕等)導致表單轉發?

(這涉及到使用中如下面的示例代碼C#代碼IfPost分支機構):

if(IsPost) 
{ 
    //stuff that only executes if the previous request was a post. 
} 

我只是那種需要知道在這裏會發生什麼,所以我可以正確診斷我的會話狀態的問題。

感謝您的幫助! (另外,如果我簡單地回答了這個問題,我很遺憾,我知道它可能比簡單的答案更復雜)。

** * ** *UPDATE* ** * ** * ** * 另外,我找的這個副本這裏的問題,在StackOverflow上,但我沒有看到任何東西,所以如果這是一個重複的問題,我很抱歉。

這裏的答案都是很好的答案。我接受了也解決了我的問題的答案,雖然PRG不是「唯一」的方式,但它似乎可能是最好的。它似乎也是處理客戶端用戶友好性的一種不斷增長的方式,而imho似乎是一個很好的習慣。

謝謝你給我看!

回答

5

是的。如果頁面是使用POST數據加載的,則會發生。爲了防止這種情況,您需要實施POST/REDIRECT/GET pattern

Post/Redirect/Get(PRG)是一種Web開發設計模式,可防止一些重複的表單提交,爲用戶代理(用戶)創建更直觀的界面。 PRG以可預測的方式支持書籤和刷新按鈕,不會創建重複的表單提交。

+0

我有一個問題:如果您嘗試發佈敏感信息(社會安全號碼等),如果使用GET不會產生任何人都可查看的查詢字符串? – VoidKing

+0

會在這裏得到一些;-) –

2

是的。如果某人手動刷新瀏覽器,它會詢問他們是否要再次發送表單數據。這會導致代碼被執行。

0

處理此問題的一種方法是使用令牌。

  1. 發送一個隨機字符串,POST數據
  2. 存儲這個隨機字符串沿着某處
  3. 當您檢查後的數據確保存儲的字符串是一樣的,在POST請求的字符串。
  4. 如果爲true,則處理該請求。
  5. 產生新的憑證

如果有人要刷新並重新發送POST數據,你在後請求令牌將是因爲你在步驟5

產生一個新的令牌您單獨存儲在一個不同
相關問題