2011-09-30 24 views
-1

背景: 我使用兩個MVC3網站進行混合模式身份驗證。我使用Site1中的Windows身份驗證對一個人進行身份驗證,然後將該人轉發到使用表單身份驗證的Site2上。我的解決方案是在用戶通過Windows身份驗證進行身份驗證後收集site1中的用戶信息。然後,我會將此信息寫入cookie,然後重定向到站點2.然後,站點2將使用cookie中的信息來使用Forms Auth自動登錄用戶。這兩個應用程序都位於同一個域中,應該能夠共享cookie,但是在重定向之前cookie不可用,直到頁面刷新或點擊站點中的鏈接(訪問第2頁)。MVC3 Cookie未包含在請求中,直到刷新或訪問第二頁

無論如何,這是我的問題。我創建cookie,然後將用戶從Site1轉發到Site2。

...{cookie created here and added to response}... 
HttpContext.Response.Redirect("http://site2.mydomain.com") 

當我這樣做時,請求中沒有cookie。但是,一旦在Site2的主頁上,我可以點擊刷新,然後我的cookie就成爲請求的一部分,我的身份驗證就可以正常工作。

我需要我的迴應寫的cookie到客戶端,然後得到該cookie在請求加入,但它似乎使用的Response.Redirect時跳過......

UPDATE: 我已經讀過請求只會在請求發出之前存在cookie時才包含cookie。由於我正在將cookie寫入請求的響應中,因此只有後續請求才會包含cookie。所以,我需要的是強制第二個請求的方法,一旦他們從最初的請求得到我的迴應。所以...

用戶發送請求--->響應返回cookie --->強制另一個請求(應該包含cookie)--->返回請求的頁面。

我可以使用JavaScript來做到這一點嗎? javascript是否可以檢查某個特定名稱的cookie的響應,並在找到後重定向到當前頁面?

+0

也許我需要做一個客戶端重定向後的響應與餅乾? –

+0

沒有評論添加投票我的問題是什麼? –

回答

1

如果您必須強制刷新以獲取第二個請求,則可以從Site1的重定向HttpContext.Response.Redirect(「http://site2.mydomain.com?refresh=1」)追加查詢字符串參數,然後在Site2中,導致重定向到同一頁面sans查詢字符串參數。

雖然這並不是很理想。您可以將該cookie信息放入一個一次性認證URL的查詢字符串中,然後存儲新的cookie並重定向到Site2的主頁?

+0

由於Site1僅適用於本地用戶,我很滿意'非理想'解決方案。我可以在查詢字符串中添加一些會導致刷新的東西,但我一直無法弄清楚如何導致刷新。也許在客戶端的'一次運行'腳本,將強制刷新? –

+0

如果Site1是爲本地用戶,我建議我的第二種方法,它基本上用查詢字符串替換cookie(即:http://site2.mydomain.com/?auth_token=23949&other_auth=d9fj3)當查詢字符串是檢測到,執行與您使用cookie相同的身份驗證步驟。完成登錄步驟後,做一個Response.Redirect到Site2頁面(Response.Redirect(「http://site2.mydomain.com」)) –

+0

我會嘗試你的解決方案,或者它的一些變化。有點讓我在另一個思考過程中工作。我會標記接受您的答案,並在完成後用最終解決方案更新我的問題。給你的賞金呢!謝謝。 –