我正在使用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來解決這個問題,但我寧願修復根本問題,不管它是什麼,這隻發生在登錄頁面上。
因爲它呢!你可以使用Server.Transfer嗎? – Aliostad 2010-11-11 17:48:44
是否有使用cookie的理由?有一個完美可行的內置解決方案,您應該使用它。 http://www.asp.net/mvc/tutorials/authenticating-users-with-forms-authentication-cs – rboarman 2010-11-11 17:50:45
沒有,而現在,突然之間,沒有任何改變的cookie代碼,我的Cookie是不再設置,期間。這令人沮喪。 – Josh 2010-11-11 17:52:19