2013-04-03 104 views
1

嗨,大家好,我需要一些建議。Coldfusion的「謝謝」頁面允許用戶刷新無限次

當包含在url字符串中的訂單成功發佈時,我們的支付網關發回一些數據。

唯一的問題是用戶刷新頁面並通過一堆cfmail命令發送每次刷新謝謝頁面!

這對我們的安全性更好,在加載此頁面後不久設置重定向到我們的主頁,以設置一種方式來停止用戶多次加載頁面或刪除訂單信息,以便用戶無法點擊刷新?

以下是支付網關在成功交易時生成的示例網址。

http://www.ourwebsitename.com/ConfirmationPage.cfm?cartinfo=^XXXX^1&orderinfo=Customer^Name^Billing Name^Billing^Line^1^Town^Postcode^websitename^Order^Amount^&responsesitesecurity=SECUREHASHCODE&thisorderid=OURORDERID 

什麼是人們對保護此頁面的想法?

+0

假設他們會這樣做並編寫你的程序來處理它。西蒙的回答有一些很好的建議。 –

回答

5

我已經在過去解決這個問題的方法是做到以下幾點

  1. 在用戶顯示任何頁面,儘量不要有任何實際做任何事情的邏輯。僅在顯示頁面
  2. 在結賬過程結束時顯示邏輯,發送電子郵件,然後用<cflocation>重定向到確認頁面
  3. 添加一些校驗位的會話或任何你用它來保持跟蹤用戶標記電子郵件已發送
  4. 如果您真的不希望用戶重新發送電子郵件兩次,請使用<cflock>並確認#3中提到的標誌未在<cflock>內標記(以使確定它沒有被鎖定它的過程發送)

這應該有助於紅色uce /刪除用戶刷新的影響。當我以前有過這種情況時,原因在於人們將邏輯放在應該出現在用戶沒有顯示的頁面之一的輸出頁面上(由於他們默默重定向)

+0

三江源的幫助,我也跟着你的建議如下 - :在新列 CFIF條件發送電子郵件 SET標誌來判斷是否郵件已發送,通過使用 JavaScript的傳遞順序的表單元素重定向到三江源頁到新頁面,CFLOCATION不會通過表單元素... 現在排序,非常感謝:-) – matthew

+0

隨着cflocation你可以通過URL傳遞數據,但如果它是一個訂單系統,可能會有敏感數據,所以不錯的選擇。 –

+0

再次感謝Matt – matthew

1

我建議您在數據庫的訂單表中添加一個confirmation_email_sent列,然後在您第一次發送電子郵件時設置此標誌。如果用戶刷新頁面,您會注意到該標誌已經設置,然後可以跳過發送電子郵件。如果除電子郵件發送之外還有其他副作用,那麼這些應該可能以相同的方式減輕。