我正在使用cookie,如果设置了cookie,它会将用户转发到signin,否则会显示一个错误页(未经授权)。cookie设置正确,如果我通过在地址栏中键入它来导航到任何页面,它都可以正常工作。但是,当我使用RedirectToAction或FormsAuthentication.RedirectToLogin时,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
这是饼干的信息
__请求验证肯Lw=NNu8v2oTMX2YKQOW+JRN1LQRYPhlmPszQa8Rs1KrQp1pPxWmQO8GG7eRrzbhFZF38p05ckuLHAK3QaTIlxeFJ6POTX1woXRx/ahaplppf529injo9mj3jsnohqg6fthzjpolyql61noccu2wwzlmqg==;
4%40f0nkybqctd4g9yl1j8kdncwdqrpixreohlump2lc*=P%2ffJD5CdLO0pCGU6GntaPw*
=P6QAytlDVUrkQn84c9vDVg
第二
4%40f0nkybqctd4g9yl1j8kdncwdqrpixreohlump2lc*=;
4%40f0nkybqctd4g9yl1j8kdncwdqrpixreohlump2lc*=P%2ffJD5CdLO0pCGU6GntaPw*
*
第三
4%40f0nkybqctd4g9yl1j8kdncwdqrpixreohlump2lc*=P%2ffJD5CdLO0pCGU6GntaPw*
=P6QAytlDVUrkQn84c9vDVg
*
第四
4%40f0nkybqctd4g9yl1j8kdncwdqrpixreohlump2lc*=;
__请求验证肯Lw=NNu8v2oTMX2YKQOW+JRN1LQRYPhlmPszQa8Rs1KrQp1pPxWmQO8GG7eRrzbhFZF38p05ckuLHAK3QaTIlxeFJ6POTX1woXRx/ahaplppf529injo9mj3jsnohqg6fthzjpolyql61noccu2wwzlmqg==;
4%40f0nkybqctd4g9yl1j8kdncwdqrpixreohlump2lc*=P%2ffJD5CdLO0pCGU6GntaPw*
*
下面是我在地址栏中输入/登录时的样子
__请求验证肯Lw=NNu8v2oTMX2YKQOW+JRN1LQRYPhlmPszQa8Rs1KrQp1pPxWmQO8GG7eRrzbhFZF38p05ckuLHAK3QaTIlxeFJ6POTX1woXRx/ahaplppf529injo9mj3jsnohqg6fthzjpolyql61noccu2wwzlmqg==;
=P6QAytlDVUrkQn84c9vDVg
是的,我的饼干是加密的。cookiename是“4%40f0nkybqctd4g9yl1j8kdncwdqrpixreohlump2lc*”在我看来,重定向在其中附加了一个新的空cookie。为什么?我不确定。
附加
经过调试,我发现请求中确实有3个cookie。第一个是空cookie,在使用名称时默认返回。集合中的第三个cookie设置了值。为什么要在请求中附加这个cookie是个谜。我可能可以通过选择一个比另一个更有价值的cookie来解决这个问题,但是我宁愿解决根问题,不管它是什么,它只发生在登录页面上。