2011-11-26 167 views
1

我在我的ASP.net MVC 3網站(在Azure中託管)中使用Azure ACS,場景是這樣的: 用戶首先進入我的網站並填充一個字段表單,然後他們需要選擇一個提供者和登錄名,但首先我要存儲字段值,以便當他們從登錄中返回時,我可以使用此值爲用戶創建一個配置文件。Azure ACS +表單值存儲

所以我相信當他們第一次進入網站,然後離開登錄,再次進入網站這些是兩個不同的會議我是對嗎?這就是使用會話狀態(通過SQL Server)存儲的數據在登錄後回來時不存在的原因。如果這是真的,那麼最好的方法是什麼?如果沒有,那麼我做錯了存儲臨時數據的權利?

感謝

UPDATE: 我發現HttpContext.Application狀態作品保存數據,還是我不知道,如果是使用它的控制器考慮到它在Azure中的好主意,將它適合生產?

+0

您不應**使用應用程序狀態來存儲以用戶爲中心的數據。特別是在Azure中(但不僅在Azure中)。引用來自:http://msdn.microsoft.com/en-us/library/ms178594.aspx: *「應用程序狀態是一個有用的地方,可以存儲**不會從一個用戶更改的少量常用數據到另一個**。「* – astaykov

+0

是的,我真的不想使用狀態,謝謝:)雖然它不是用戶數據只是將公開的數據 – Keoz

回答

0

另一種方法是保存需要在數據庫中傳遞的任何數據,並傳遞一些引用數據庫記錄的ID。你會通過這個ID傳遞給IP,並通過wctx返回(正如Mike上面提到的)。

這將解決URL長度有限的問題(萬一您的數據非常大)。當然,你需要管理這些數據的刪除,但這不應該很難。

3

您可以使用wctx URL參數在WS聯合重定向序列中傳遞狀態。在處理初始POST請求的動作中,應該保留要保留的表單參數,然後將URL重定向到身份提供者選擇頁面(這將必須是一個自定義頁面),同時將表單參數附加到該URL。當用戶選擇頁面上的IP時,可以使用wctx參數再次傳遞該參數。 WS-Federation被動請求者配置文件表示,當IP將用戶重定向回您的網站時,最終應該返回給您。

這有一些細節

http://msdn.microsoft.com/en-us/library/bb608217.aspx

編輯:要獲得wctx參數超出請求時,用戶最終還是回到你的應用程序。把像這樣的動作代碼:

var fam = FederatedAuthentication.WSFederationAuthenticationModule; 

if (fam.CanReadSignInResponse(System.Web.HttpContext.Current.Request, true)) 
{ 
    string wctxValue = this.HttpContext.Request.Form["wctx"]; 
} 

我的選擇是有wcxt參數表示重定向URL(URL編碼)與您的參數在查詢參數所以它是這樣一個URL編碼版本:

wctx=https://yourserver/yourapp/yourpage?yourparameter=foo 

不將所接收到來自ACS重定向只會拉出來wctx價值,做一個重定向到它沒有任何更多的處理動作。這使事情變得簡單。

+0

哦,我明白了,所以這個參數將永遠返回後登錄,我可以將它附加到IP網址 – Keoz

+0

好的,我想這是一個不錯的起點我得到它,wctx參數裏面有參數,所以我認爲我必須修改這個字符串並讓我的參數在那裏,現在另一個新手問題是當用戶回來時如何從控制器返回代碼:? – Keoz

+0

我發現這篇文章有幫助http://stackoverflow.com/questions/8240124/a-custom-login-page-for-azure-acs-not-working我想我很近我會深入這東西:)謝謝 – Keoz