2013-05-16 58 views
3

我們在Azure上運行ASP.NET MVC Web角色。整個網站需要https,使用[RequireHttps]屬性。作爲網站的一部分,我們已經與信用卡支付網關進行了整合。使用Azure,Https和遠程HTTP調用組合刪除會話

用戶可以登錄,無論他們留在網站上多長時間或訪問哪個網頁,一切都很好,直到他們到達付款步驟。付款涉及以下內容:

  1. 用戶單擊「購買」,並將其購物車信息張貼到控制器操作一。
  2. 控制器動作一。
    1. 從服務器向支付處理器的API發送http請求以獲取唯一的表單操作URL。
    2. 向用戶呈現收集付款信息的表單。
  3. 即形式,然後直接使用表單動作URL從步驟2
  4. 支付處理器將瀏覽器重定向到控制器動作的兩個,與令牌發佈了由瀏覽器到支付處理器。
  5. 控制器動作二
    1. 我們使用令牌從服務器向支付處理器發送最終請求,以完成交易。
    2. 我們向用戶呈現成功頁面。

在付款過程中的某個地方,用戶的會話被丟棄。我們不會明確地記錄任何人或做任何其他事情,似乎會導致這種情況。

其他有用的信息:

  • 我們只有運行一個實例,所以我們使用的是InProc會話,而不是AppFabric的。
  • 本地測試服務器沒問題。在可能的情況下,所有內容都是相同的。
  • Azure模擬器中的一切都很好(據我測試它,一個完整的測試需要支付網關訪問模擬器,這是不可能的)。
  • 認證cookie在瀏覽器中仍然完好無損。
  • 一切都在會話超時窗口內發生。
  • 如果我關閉https和一切運行在http上,那麼一切都很好。

什麼可能導致用戶的會話被刪除?它必須是結合Azure,https和遠程http請求的結果,因爲如果我將其中的一個從等式中刪除,那麼一切正常。

+0

您正在使用的I幀?此外,使用Fiddler查看會話Cookie是否在來自付款處理器的重定向後重置。 – Rob

+0

此外,當付款處理器重定向到您的網站是https? – Rob

+0

沒有內聯框。重定向是https。 – robomark

回答

0

如果您重定向,Asp.Net將刪除會話令牌。有一個布爾值可以禁用會話刪除。嘗試:

Response.Redirect(vm.ReturnUrl, false); 

編輯

其實,天青做負載均衡,你不能猜測哪一個工作將得到一個給定的會話。因此,您使用:

  1. 餅乾
  2. Azure的共享會話緩存

來源:Azure Asp.Net Redirect destroys Session variables