2010-11-11 69 views
2

我正在使用cookie,如果設置了cookie,它會轉發用戶登錄,否則會顯示錯誤頁面未經授權)。該cookie設置正確,如果我通過在地址欄中鍵入它來導航到任何頁面,它都可以正常工作。但是,當我使用RedirectToAction或FormsAuthentication.RedirectToLogin時,cookie不可用,這將導致重定向中的無限循環。RedirectToAction導致空Cookie被設置在cookie的值之前,從而導致「丟失」Cookie

首頁 - 如果用戶有Cookie,請登錄,如果不顯示主頁。

簽到 - 如果用戶的cookie,顯示頁面,否則重定向到家裏

我重定向通過一個屬性來處理。

public sealed class RequireBillerAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     IUserSession session = ServiceLocator.Locate<IUserSession>(); 

     if (session.BillerId == 0) 
      filterContext.Result = new RedirectResult("~/"); 
    } 
} 

我的首頁動作看起來像這樣

public ActionResult Index() 
    { 
     //if the user is signed in, send them to their account page. They don't need to see the front page 
     if (Request.IsAuthenticated) 
     {   
      return RedirectToAction("Index", "Account"); 
     } 

     //users with their cookie set should sign in 
     if (session.BillerId != 0) 
      return RedirectToAction("Index", "SignIn"); 

     return View(); 
    } 

我的登入動作看起來像這樣

[RequireBiller] 
    public ActionResult Index() 
    { 
     SignInModel model = BuildSignInModel(); 

     return View(model); 
    } 

現在,當我打mysite.com/重定向會導致一個無限循環。在調試中,該屬性無法從cookie中找到值。該cookie在請求中實際上是空白的。當我輸入mysite.com/signin時,一切都很有用。有任何想法嗎?

編輯

至於建議,我跑了小提琴手。這裏的要求是什麼樣子

# Result Protocol Host URL Body Caching Content-Type Process Comments Custom 
1 302 HTTP localhost:27412/ 124 private  text/html; charset=utf-8 chrome:6008   
2 302 HTTP localhost:27412 /SignIn 118 private  text/html; charset=utf-8 chrome:6008   
3 302 HTTP localhost:27412/ 124 private  text/html; charset=utf-8 chrome:6008   
4 302 HTTP localhost:27412 /SignIn 118 private  text/html; charset=utf-8 chrome:6008 

,這裏是cookie信息

首先

__RequestVerificationToken_Lw __ = NNu8v2oTMX2YKQOW + JRN1LQRYPhlmPszQa8Rs1KrQp1pPxWmQO8GG7eRrzbhFZF38p05ckuLHAK3QaTIlxeFJ6POTX1woXRx/ahApLpF529inJO9mj3jSnoHqG6fthzJpoLYQL61NOCCUO2wwzLmQg ==; 4%40f0nkyBbqcTD4g9yl1J8KDNcWdqRpixrEoHLuMP2Lc * = P%2ffJD5CdLO0pCGU6GntaPw * = P6QAytlDVUrkQn84c9vDVg *

4%40f0nkyBbqcTD4g9yl1J8KDNcWdqRpixrEoHLuMP2Lc * =; __RequestVerificationToken_Lw __ = NNu8v2oTMX2YKQOW + JRN1LQRYPhlmPszQa8Rs1KrQp1pPxWmQO8GG7eRrzbhFZF38p05ckuLHAK3QaTIlxeFJ6POTX1woXRx/ahApLpF529inJO9mj3jSnoHqG6fthzJpoLYQL61NOCCUO2wwzLmQg ==; 4%40f0nkyBbqcTD4g9yl1J8KDNcWdqRpixrEoHLuMP2Lc * = P%2ffJD5CdLO0pCGU6GntaPw * = P6QAytlDVUrkQn84c9vDVg *

第三

__RequestVerificationToken_Lw __ = NNu8v2oTMX2YKQOW + JRN1LQRYPhlmPszQa8Rs1KrQp1pPxWmQO8GG7eRrzbhFZF38p05ckuLHAK3QaTIlxeFJ6POTX1woXRx/ahApLpF529inJO9mj3jSnoHqG6fthzJpoLYQL61NOCCUO2wwzLmQg ==; 4%40f0nkyBbqcTD4g9yl1J8KDNcWdqRpixrEoHLuMP2Lc * = P%2ffJD5CdLO0pCGU6GntaPw * = P6QAytlDVUrkQn84c9vDVg *

第四

4%40f0nkyBbqcTD4g9yl1J8KDNcWdqRpixrEoHLuMP2Lc * =; __RequestVerificationToken_Lw __ = NNu8v2oTMX2YKQOW + JRN1LQRYPhlmPszQa8Rs1KrQp1pPxWmQO8GG7eRrzbhFZF38p05ckuLHAK3QaTIlxeFJ6POTX1woXRx/ahApLpF529inJO9mj3jSnoHqG6fthzJpoLYQL61NOCCUO2wwzLmQg ==; 4%40f0nkyBbqcTD4g9yl1J8KDNcWdqRpixrEoHLuMP2Lc * = P%2ffJD5CdLO0pCGU6GntaPw * = P6QAytlDVUrkQn84c9vDVg *

下面是什麼樣子時,I /登入輸入到地址欄

__RequestVerificationToken_Lw __ = NNu8v2oTMX2YKQOW + JRN1LQRYPhlmPszQa8Rs1KrQp1pPxWmQO8GG7eRrzbhFZF38p05ckuLHAK3QaTIlxeFJ6POTX1woXRx/ahApLpF529inJO9mj3jSnoHqG6fthzJpoLYQL61NOCCUO2wwzLmQg ==; 4%40f0nkyBbqcTD4g9yl1J8KDNcWdqRpixrEoHLuMP2Lc * = P%2ffJD5CdLO0pCGU6GntaPw * = P6QAytlDVUrkQn84c9vDVg *

是的,我的cookies進行加密。 cookiename是「4%40f0nkyBbqcTD4g9yl1J8KDNcWdqRpixrEoHLuMP2Lc *」在我看來,重定向是在那裏追加一個新的空cookie。爲什麼?我不確定。

ADDITIONAL 調試後,我發現確實在請求中有3個cookie。第一個是空cookie,在使用名稱時默認返回。集合中的第三個cookie具有設置的值。爲什麼它將這個cookie添加到請求中是一個謎。我可以通過挑選比另一個有價值的cookie來解決這個問題,但我寧願修復根本問題,不管它是什麼,這隻發生在登錄頁面上。

+0

因爲它呢!你可以使用Server.Transfer嗎? – Aliostad 2010-11-11 17:48:44

+0

是否有使用cookie的理由?有一個完美可行的內置解決方案,您應該使用它。 http://www.asp.net/mvc/tutorials/authenticating-users-with-forms-authentication-cs – rboarman 2010-11-11 17:50:45

+0

沒有,而現在,突然之間,沒有任何改變的cookie代碼,我的Cookie是不再設置,期間。這令人沮喪。 – Josh 2010-11-11 17:52:19

回答