2012-10-27 46 views
0

我有2個JSP頁面:pay.jspconfirmPay.jsp如何保存兩次調用控制器方法之間的數據?

用戶對pay.jsp提交數據(信用卡號碼等)。該數據在後端進行驗證,並與其他一些數據一起顯示在confirmPay.jsp上。一旦他點擊'確認',數據(來自pay.jsp頁面)用於計費。如果他點擊「取消」,則付款將被丟棄。

這裏最重要的事情是:

  1. 數據應該修改只在pay.jsp
  2. 數據應該在這兩個電話

我知道這個問題類似於How to preserve the ModelMap between form submits?之間被保留。只是想知道什麼適用於這種情況,涉及敏感信息(如信用卡#)。將它放在一個會話中意味着同一個函數中的多個調用會產生問題。

請幫我理解最好的選擇是什麼。

+0

您是否嘗試過答案中提供的解決方案?從Bozho檢查這一行:*除非您使用會話*,否則您無法將所有內容保留在請求中。你有沒有嘗試過知道這一點?另外,如果你把對象放在用戶會話中,你會遇到什麼樣的問題? –

+0

這應該有效,但正如我在問題的底部指出的那樣,這意味着一次只能完成一個事務。另一個要做的事情是將隨機「id」與會話屬性一起存儲,並根據該id區分數據。我只是想知道最好的方法是什麼 – th3an0maly

+0

假設你有一個'PaymentInfo'類的這個信息。然後,你只需要保存它:'session.setAttribute(「paymentInfo」,oPaymentInfo);'並在需要時檢索它:'PaymentInfo oPaymentInfo =(PaymentInfo)session.getAttribute(「paymentInfo」);'。交易完成後(通過'Confirm'或'Cancel'用戶操作),您應該從會話中刪除這些數據:'session.removeAttribute(「paymentInfo」);',就這麼簡單。如果您需要在會話中保存更多數據,則可以存儲'Set ',並覆蓋'PaymentInfo'中的'hashCode'和'equals'方法。 –

回答

2

如果您擔心在會話中存儲敏感數據,請不要擔心。會話保存在服務器端的內存中。它不會在網絡上傳輸,並且不能從網絡上的入侵者的瀏覽器內存中讀取。

如果您擔心用戶在同一頁面上有多個打開的瀏覽器選項卡或框架,並且在同一個會話中並行發送多筆付款,那麼這是一個非常有效的問題。我傾向於更喜歡無狀態的解決方案,所以如果隱藏的字段是一個可接受的解決方案,那麼就用它們來維護從一個頁面到另一個頁面的狀態。這不會對多個選項卡造成任何問題。如果您需要使用會話來存儲中間狀態,那麼您可以簡單地生成一個唯一的ID(例如,使用序列號),使用唯一ID作爲會話屬性將數據存儲在會話中,並將該唯一ID從頁面使用隱藏字段的頁面。這樣,多個選項卡將使用不同的會話屬性,並且不會互相干擾。

+0

或者,正如我在評論中所述,您可以將付款數據保存到「Set」中,並將此集存儲在會話中。不過,你的解釋非常好。 –

+0

您仍然需要一種方法將來自給定瀏覽器選項卡的給定請求與給定付款相關聯。你會如何在會話中只用一組付款? –

相關問題