2010-04-18 63 views
0

我在asp.net中構建了一個付款頁面,但是您訂購物品的頁面在我的域中以HTTP(非安全)方式運行。跨中繼域維護會話?

當將用戶重定向到支付網站,我必須要經過不同的域(我的支付服務提供商,從他們那裏我借用SSL證書),所以我的付款網址結束了像https://www.paymentprovider.com/somescript.cgi/www.mydomain.com/mypaymentpage.aspx

現在的問題是我的會話丟失了,但我在會話中存儲了訂單,所以我非常需要它。

我可以以某種方式發送查詢字符串中的SessionID,並從它恢復會話 - 或者我需要將整個訂單填入查詢字符串? (不太肯定它會適應不過,這是相當長)

任何幫助將不勝感激:-)

回答

1

斯特芬

正確的方法是使用你用支付發送一個唯一訂單ID,然後支付網關其發回給你

它並不像聲音那麼簡單,因爲爲了安全起見,您需要ether來加密orderID,然後發送它並加密,否則每個人都可以看到並更改您的訂單,以太通信可以與支付網關進行某種加密協議。

貝寶以這種方式,您需要發送給貝寶一個唯一的ID,您可以使用它只有一次的交易,然後貝寶使這個ID的參考基礎。

你對會話和cookie說的另一種方式是不安全的,兩者都可以過期,失去,以往任何時候。會話仍然保存在cookie上。更長的會話時間可以使你所有的工作 - 但它不安全和隨機發生會話或cookie的事情。

+0

問題是訂單沒有存儲在數據庫中,但我想我必須改變它,所以我可以使用OrderID方法。感謝您的評論。 – Steffen 2010-04-18 14:01:23

+0

@Steffen是的,您絕對必須確定一種方法來存儲唯一的訂單ID,即使訂單保持打開狀態 - 每個新訂單都必須獲得一個新的唯一訂單ID,這就是您在頁面上的每個狀態下傳遞的順序。 – Aristos 2010-04-18 14:36:09

+0

我已經得到它現在運行。我創建數據庫中的每一個訂單,並在域之間傳遞時使用我的querystring的guid。 我使用一個guid,所以人們不能只在1,2,3等情況下查看其他人的訂單。 我意識到這並不完美,但是當我被查詢字符串卡住時,它幾乎是我能得到的最好的。 再次感謝您的建議:-) – Steffen 2010-04-18 19:39:44

-2

你爲什麼不正確的重定向之前加載到會話一個Cookie,當用戶到達您的付款區域,從該cookie重新創建會話?

+0

那會比不安全 – 2010-04-18 13:53:03

+0

而且不起作用,因爲cookie不可用,因爲我在不同的域上。 – Steffen 2010-04-18 14:00:24